我使用child_process.exec
/ child_process.spawn
来派生新进程,然后使用child.kill
/ process.kill
杀死它。这对于简单的二进制可执行文件(如cat
/ ls
)可以正常工作,并且子进程就被杀死了。
但是,当涉及到脚本(比如P1)派生了另一个子进程(比如P2)时,只有脚本解释器P1被杀死,而不是子进程P2。
问题:有没有办法在Node.JS中使这样的子进程P2被终止?
代码对于run_and_kill('ls -Al /usr/lib')
可以正常工作,但对于run_and_kill('firefox')
则不行:
function run_and_kill(cmd) {
var exec = require('child_process').exec,
ls = exec(cmd);
console.log('Child process started: %d', ls.pid);
ls.on('exit', function(code, signal) {
console.log('exit with code %s and signal %s', code, signal);
});
ls.kill();
}
ls.pid
(https://github.com/joyent/node/blob/master/lib/child_process.js#L250) - Andrey Sidorov