在节点进程被终止时杀死所有child_process

时间:2013-08-16 14:35:01

标签: node.js cluster-computing child-process

如何确保在父进程被终止时杀死所有child_process。 我有类似下面的东西。

即使节点进程被终止,我也看到FFMPEG继续运行并且生成了out.avi。如何在节点进程退出后停止运行FFMPEG。

var args = "ffmpeg -i in.avi out.avi"
child_process.exec(args , function(err, stdout,stderr){});

child_process.exec(args , function(err, stdout,stderr){});

2 个答案:

答案 0 :(得分:28)

您需要侦听进程退出事件并终止子进程。这应该适合你:

var args = "ffmpeg -i in.avi out.avi"
var a = child_process.exec(args , function(err, stdout,stderr){});

var b = child_process.exec(args , function(err, stdout,stderr){});

process.on('exit', function () {
    a.kill();
    b.kill();
});

答案 1 :(得分:-3)

您可以侦听退出流程事件,因此当主流程即将退出时,您有时间在ffmpeg子流程上调用kill方法

var args = "ffmpeg -i in.avi out.avi"
var ffmpegChildProccess = child_process.exec(args , function(err, stdout,stderr){});

process.on('exit', function() {
  console.log('process is about to exit, kill ffmpeg');
  ffmpegChildProccess.kill();
});

修改:正如评论提及并且 fakewaffle 解决方案正确,在child_process中不会调用kill,而是在执行时对子进程的引用中调用kill EXEC。
此外,我删除了“这是一个什么......”,因为这是不必要的,无意中我发现它在大声朗读时听起来很刺耳。