我们有一个主节点进程,它生成了许多带有child_process.fork()
的子进程,这些子进程本身都生成了一个帮助子进程。我们使用node-forever来管理主节点进程的生命周期,并经常使用forever restartall
来重新启动它。
我们偶尔看到的一个问题是孙子进程将无法终止,我们最终会运行重复的子进程。 IE浏览器。应该是什么:
Main Process
Child Process 1
Grandchild Process 1
Child Process 2
Grandchild Process 2
在restartall
之后结束这样:
Main Process
Child Process 1
Grandchild Process 1
Child Process 2
Grandchild Process 2
Grandchild Process 1
Grandchild Process 2
不出所料,这会导致许多奇怪的问题,我们通常必须重新启动整个服务器(或者手动终止进程,如果我们可以确定哪些是旧的)。
据我了解,当它重新启动时,永远会向进程发出SIGTERM
消息。我相信这个消息应该级联到子孙进程(但如果我在那里作出了错误的假设,请纠正我)。 由于这个问题可能只发生在100中一次,也许这与时间有关?
什么情况可能导致孙子进程无法终止?如何缓解这种情况?
操作系统是Debian Squeeze。
编辑:我的初步描述有点过于简化。我已将其更新为包含所有细节。EDIT2:我们不再永远使用了。我推荐PM2