我有这个函数,并分叉一个子进程以在后台运行繁重的工作。work
模块在完成工作后发送消息。如何终止或关闭分叉进程?
function doWork() {
var child = cp.fork(__dirname + '/work');
child.on('message', function(m) {
console.log('completed: ' + m);
// try to kill child process when work signals it's done
child.kill('SIGHUP');
});
child.send({
msg: 'do work',
name: self.myname
});
}
-编辑-
我尝试了child.kill('SIGHUP')
,当工作表明它已完成时child.kill();
。我似乎没有杀死这个过程。如果我做ps | grep node
,它仍然表明工作流程是活的。我错过了什么?
我希望我不会太晚!
您可以尝试获取分叉子项的 pid 并将其作为参考传递给子项,当作业完成时,发送 pid 以及完成信号,您可以根据 pid 终止进程。
function doWork() {
var child = cp.fork(__dirname + '/work');
child.on('message', function(m) {
//try to pass pid along with the signal from child to parent
console.log('completed: ' + m);
//killing child process when work signals it's done
process.kill(m.pid);
});
child.send({
msg: 'do work',
name: self.myname,
pid : child.pid // passing pid to child
});
}