杀死node.js程序而不杀死子进程

时间:2015-05-19 18:33:12

标签: javascript linux node.js process

我有一个已启动多个子进程的node.js程序。我希望能够测试这些子进程发生了什么,如果节点崩溃但是让它们运行起来。我尝试了以下方法:

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

这在我的测试设置上运行良好,当我运行以下命令时,子进程保持正常运行并且Node实例关闭:

killall -10 node

但是,令我惊讶的是,在我的生产部署中,它未能让子进程保持原状。我感兴趣的主要子进程是chrome-browser的一个实例。差异似乎是流程的启动方式。在我的测试设置中,我直接调用了节点,但在我的生产设置中,我正在调用一个执行调用的脚本。

我想要找到的是上面的匿名回调函数内部的一种方法,它处理SIGUSR1信号,告诉节点在杀死子进程时不要关闭它。我知道我可以分离我创建的过程,但我宁愿做一些不太介入的事情(尽管不可否认,这并没有太多参与)。

我在Ubuntu 12.04上运行节点0.8.21。

感谢您提出任何想法。

1 个答案:

答案 0 :(得分: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)时,它会启动并运行我的浏览器。