使用后如何杀死分叉的子进程?

cod*_*ons 11 fork child-process node.js

我有这个功能并 fork 一个子进程在后台运行繁重的工作。该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
    });
}
Run Code Online (Sandbox Code Playgroud)

-编辑-

我试过了child.kill('SIGHUP')child.kill();当工作信号完成时。我似乎没有杀死这个过程。如果我这样做了ps | grep node,它仍然显示工作进程还活着。我错过了什么?

小智 1

我希望我还不算太晚!

您可以尝试获取分叉子进程的 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
    });
}
Run Code Online (Sandbox Code Playgroud)