如何在退出时终止所有子进程?

如何在node.js进程退出时终止所有子进程(使用child_process.spawn生成)?


我认为唯一的方法是保持对spawn返回的ChildProcess对象的引用,并在退出主进程时将其ChildProcess

一个小例子:

var spawn     = require('child_process').spawn;
var children  = [];

process.on('exit', function() {
  console.log('killing', children.length, 'child processes');
  children.forEach(function(child) {
    child.kill();
  });
});

children.push(spawn('/bin/sleep', [ '10' ]));
children.push(spawn('/bin/sleep', [ '10' ]));
children.push(spawn('/bin/sleep', [ '10' ]));

setTimeout(function() { process.exit(0) }, 3000);

要添加到@ robertklep的答案:

如果像我一样,当Node在被外部杀死而不是自己选择的时候想要这样做,那么你必须对信号做一些欺骗。

关键是要监听你可能被杀死的任何信号,并调用process.exit() ,否则Node默认不会在process发出exit

var cleanExit = function() { process.exit() };
process.on('SIGINT', cleanExit); // catch ctrl-c
process.on('SIGTERM', cleanExit); // catch kill

这样做后,您可以正常听取process exit

唯一的问题是SIGKILL不能被捕获,但那是设计。 无论如何,你应该用SIGTERM (默认) kill

看到这个问题更多。

链接地址: http://www.djcxy.com/p/52709.html

上一篇: How to kill all child processes on exit?

下一篇: Node.js as a server script