26

当父进程被杀死时,我如何确保所有子进程都被杀死。我有类似下面的东西。

即使节点进程被杀死,我也看到 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){});
4

2 回答 2

30

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

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();
});
于 2013-08-16T15:06:06.357 回答
-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解决方案正确,kill 不是在 child_process 中调用,而是在执行 exec 时获得的对子进程的引用中调用。
我还删除了“what a about ...”,因为这是不必要的,而且我无意中意识到大声朗读时听起来很刺耳。

于 2013-08-16T15:03:27.327 回答