我有一个自动守护进程并管理它们的监视器。
所以我有这个node.js程序以某种方式产生另一个进程。我的代码不使用forking或类似的东西,它只是使用setInterval进行无限循环,它可以完成一些db工作。
这就是它的运行方式:
node /path/to/program.js >> program.log 2>&1
在此之后,top -bcn1|grep program.js
显示:
24763 ubuntu 20 0 695m 21m 5464 S 0 0.3 0:00.39 node /path/to/program.js
25053 ubuntu 20 0 4264 580 484 S 0 0.0 0:00.01 sh -c node /path/to/program.js >> program.log 2>&1
我的进程监视器然后设置一个25053的pid文件,所以当我告诉它重启程序时它会杀死25053,再次启动程序,现在上一个命令的输出是:
24763 ubuntu 20 0 695m 21m 5464 S 0 0.3 0:00.39 node /path/to/program.js
23520 ubuntu 20 0 630m 21m 5464 S 0 0.3 0:00.39 node /path/to/program.js
23012 ubuntu 20 0 4264 580 484 S 0 0.0 0:00.01 sh -c node /path/to/program.js >> program.log 2>&1
那么我该如何制作它以使“儿童”过程或其它任何东西也被杀死?
我觉得这是节点中的基本内容,但我还没有找到答案。
答案 0 :(得分:0)
你需要监听离开事件的退出事件......
尝试:
var children = [];
//keep track of the child processes...
process.on('exit',function(){
children.forEach(function(child){
child.kill('SIGINT');
});
});
注意:在孩子们中,你会想听'SIGINT'等。