杀死一个node.js程序而不杀死subprocess
我有一个node.js程序已经启动了多个subprocess。 我希望能够testing一下,如果节点崩溃但是让它们继续运行,这些subprocess会发生什么。 我尝试了以下内容:
process.on('SIGUSR1', function(){ process.exit(0); });
这对我的testing设置非常有效,当我运行以下命令时,subprocess保持正常运行,Node实例closures:
killall -10 node
但是,对于我的生产部署来说,让我感到意外的是,没有把孩子的stream程留下来。 我感兴趣的主要subprocess是铬浏览器的一个实例。 差异似乎是过程开始的方式。 在我的testing设置中,我直接调用节点,但是在我的生产环境中,我调用了一个调用的脚本。
我想find的是上面的匿名callback函数内部的一种方法,它处理SIGUSR1信号,告诉节点不要closures自己的subprocess。 我知道我可以分离我创build的stream程,但是我宁愿做一些不太重要的事情(尽pipe我们承认,这并不太涉及)。
我在Ubuntu 12.04上运行节点0.8.21。
感谢您的任何想法,你可以扔我的路。
我继续前进,试图看看创造这个过程的悲痛会让我产生多大的悲伤,不pipe这样做是否仍然允许我使用信号callback等等,一切似乎都不错。 所以我只是要这样实现它。
这是我的原始代码:
self.oUIProcessHandle = spawn('chromium-browser', ['http://127.0.0.1:8091/index.html', '-kiosk', '-incognito', '-start-maximized']);
我将其更改为以下内容:
self.oUIProcessHandle = spawn('chromium-browser', ['http://127.0.0.1:8091/index.html', '-kiosk', '-incognito', '-start-maximized'], {detached: true, stdio: ['ignore', 'ignore', 'ignore']});
现在,当我从我的代码中调用process.exit(0)
,它将启动并运行我的浏览器。