如何在不触发子进程“退出”事件的情况下杀死子进程?

时间:2019-03-07 23:06:55

标签: javascript node.js child-process

我正在生成一个子进程:

child = spawn("childprocess", [], {
    detached: true
}

我正在通过以下方式观看“退出”事件:

child.on('exit', (code, signal) => {
    // Do stuff
}

我的应用退出时,我正在使用taskkill杀死孩子(因为这是在Windows上运行的):

exec(`taskkill /PID ${child.pid} /F /T`, (error, stdout, stderr) => {
    // Do stuff
}

问题是,当进程被终止时,退出事件将触发(可以理解),但是我不希望这样做。有什么方法可以删除事件监听器?还是在不触发事件的情况下终止进程?我已经尝试过child.removeListener('exit'),但是没有用(也许是因为它是一个匿名函数?)。

1 个答案:

答案 0 :(得分:0)

  

我已经尝试过child.removeListener('exit'),但是没有用(也许是因为它是一个匿名函数?)。

该函数是否具有名称无关紧要。您只需要将相同的函数对象传递给removeListener(或off):

var handler = (code, signal) => {};
child.on('exit', handler);
child.off('exit', handler);

或致电child.removeAllListeners('exit');