如何确保在父进程被终止时杀死所有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){});
答案 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。
此外,我删除了“这是一个什么......”,因为这是不必要的,无意中我发现它在大声朗读时听起来很刺耳。