2015-05-19 131 views
1

我有一个启动了多个子进程的node.js程序。我希望能够测试这些子进程会发生什么情况,如果节点崩溃但让它们继续运行。我试过如下:杀死一个node.js程序而不会终止子进程

process.on('SIGUSR1', function(){ process.exit(0); }); 

这个工作对我的测试设置大,子进程保持正确的运行和节点的实例关闭,当我跑以下命令:

killall -10 node 

但是,太多的我对我的生产部署感到惊讶,但却无法让儿童流程继续。我感兴趣的主要子进程是铬浏览器的一个实例。差异似乎是过程开始的方式。在我的测试设置中,我直接调用节点,但在生产环境中,我调用了一个调用的脚本。

我想找到的是上面的匿名回调函数中的一种方法,它处理SIGUSR1信号,告诉节点在它自己死亡时不关闭它的子进程。我知道我可以分离我创建的流程,但我宁愿做一些较少参与的事情(尽管承认这并不太涉及)。

我在Ubuntu 12.04上运行node 0.8.21。

感谢您的任何想法,你可以扔我的路。

回答

1

我继续前进,试图看看创建过程分离的多少悲伤会导致我,这是否仍然会允许我使用信号回调等,并且看起来都很好。所以我只是要这样实现它。

这里是我的原代码:

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)从我的代码,它离开我的浏览器启动和运行。