如果脚本被杀死,node.js产生的进程将继续存在

是否有可能确保生成的进程node.js child_process将被杀害父时杀害?

这是一个示例脚本

var spawn = require('child_process').spawn; var log_tail = spawn("tail", ["-f", "/dev/null"]); setInterval(function() { console.log('just chilling'); }, 10000); 

如果我看看进程树,我看到这个:

 $ ps faux ubuntu 9788 0.0 0.0 73352 1840 ? S 15:04 0:00 | \_ sshd: ubuntu@pts/7 ubuntu 9789 0.0 0.2 25400 6804 pts/7 Ss 15:04 0:00 | \_ -bash ubuntu 10149 1.0 0.2 655636 8696 pts/7 Sl+ 15:07 0:00 | \_ node test.js ubuntu 10151 0.0 0.0 7184 608 pts/7 S+ 15:07 0:00 | \_ tail -f /dev/null 

然后,我需要停止该脚本,不能ctrl-c(说我的SSH连接丢失)

 $ kill 10149 $ ps faux ubuntu 10151 0.0 0.0 7184 608 pts/7 S 15:07 0:00 tail -f /dev/null 

你可以看到,尾巴进程仍在运行,并已经脱离了任何父母。

如果产卵者死亡,是否有一个程序化的方法来杀死一个产卵的过程?

有没有一个选项可以传给产生,或者我应该使用不同的方法,或者我需要捕获杀手信号(并会杀死-9)?

       

网上收集的解决方案 "如果脚本被杀死,node.js产生的进程将继续存在"

不是很劳工友善,但这是我使用的模板:

 var spawn = require("child_process").spawn; var workers = []; var killWorkers = function() { workers.forEach(function(worker) { process.kill(worker); }); }); process.on("uncaughtException", killWorkers); process.on("SIGINT", killWorkers); process.on("SIGTERM", killWorkers); var new_worker = spawn("tail", ["-f", "/dev/null"]); workers.push(new_worker); 

当主进程死亡时,我主要用它来杀死集群中的工人。 Ed:很显然,你可以从任何地方打电话给killWorkers ,不只是崩溃或中断。