【发布时间】: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