【发布时间】:2012-08-07 04:29:11
【问题描述】:
是否可以确保使用 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
您可以看到尾部进程仍在运行,并且已与任何父进程分离。
如果生成器被杀死,是否有编程方法来杀死生成的进程?
是否有可以传递给 spawn 的选项,或者我应该使用不同的方法,还是需要捕获 kill 信号(这对 kill -9 有效)?
【问题讨论】:
-
我的问题正好相反。如果父进程死亡,生成的进程不会保持活动状态,这就是我想要的。
-
更新:似乎只发生在 Windows 上。
标签: node.js spawn child-process