【问题标题】:Can't kill NodeJS app无法杀死 NodeJS 应用程序
【发布时间】:2015-11-23 20:12:21
【问题描述】:

有一天,无中生有,我的应用决定不死。

当我检查端口时按 ctrl + c 后,它仍然存在,不仅在我的机器上,而且在 PM2 管理的服务器上,所以我每次都需要去那里并手动终止进程。我试图在我的代码中查找问题,但当我不能时,我只是认为这只是依赖项错误之一,很快就会有修复。这有点烦人,但我可以用 kill -9 PID 终止进程,而且我在前端完成了大部分任务,所以这不是什么大问题。今天,一个多星期后问题仍然存在。 我回顾了历史,选择了我几周前所做的提交,一切正常,将 NodeJS 从 5.1.0 切换到 4.2.1,清除 npm 缓存,重新安装所有依赖项,但我仍然看到了问题。 我正在使用 LoopbackJS,但通常我只是使用“node server/server.js”启动应用程序,然后发生上述问题,但如果我使用“slc run”然后尝试使用 ctrl + c 杀死应用程序只是永远挂起,我的意思是我可以按 ctrl+c 任意多次,它仍在控制台前台运行。

如果我没有按 ctrl+c 而不是在控制台中杀死选项卡,应用程序就会毫无问题地死掉。

这是我在运行“lsof -i tcp:4000”后看到的,当应用程序应该是死的但不是时

编辑: 使用 Strongloop 进程管理器运行和终止它 - slc start/slc stop 工作正常,但在开发过程中使用运行 NodeJS 应用程序(节点 server.js)的正常方式会更方便,并且它不会改变存在一些的事实问题,最好不要把它藏在地毯下。

【问题讨论】:

  • 是不是只有在使用slc run的时候才会出现这个问题?
  • 我编辑了问题。当我用“slc run”运行它时试图杀死它时,它只是挂在前台,我可以按我喜欢的任意多的 ctrl+c,但是当我用 node server/server.js 运行它时它停留在后台跨度>
  • 如果您使用slc clusterctl stop 关闭它,是否会出现问题?或slc ctl stop 更新版本?我的猜测是它正在杀死集群控制器但让子进程继续运行。
  • 保证你不会在process.on('SIGINT', 上做任何事情?
  • 我刚玩过slc ctl。运行 slc start => slc ctl stop 1 后它确实可以工作并且应用程序没有任何问题就死了,然后我可以再次运行它。好的!但为什么?为什么只是正常的运行方式不起作用?

标签: node.js loopbackjs


【解决方案1】:

出于愤怒,我将我的应用程序剥离为最基本的元素。逐个文件,逐个文件,我找到了答案。 罪魁祸首是 phantomJS - https://github.com/sgentle/phantomjs-node。 PATCH 版本 0.8.2 引入了这个错误。 Fix 是在大约一个月前创建的,一周前合并但尚未在 npm 上发布。

【讨论】:

    猜你喜欢
    • 2018-05-07
    • 1970-01-01
    • 2010-12-10
    • 2013-07-09
    • 2020-10-23
    • 2014-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多