如何杀死退出所有的subprocess?
如何在node.js进程退出时终止所有subprocess(使用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在被外部杀死而不是自己select的时候想要这样做的话,你必须用信号做一些欺骗手段。
关键是要侦听你可能被杀死的任何信号,并调用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
不能被捕获,但这是通过devise。 无论如何,你应该用SIGTERM
(默认) kill
。
看到这个问题更多。