2013-08-16 52 views
17

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

即使当节点进程被kill时,我看到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){}); 

回答

23

你要听的过程中退出事件并杀死子进程然后。这应该适合你:

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(); 
}); 
+5

如果进程'a'在主进程触发'exit'事件并且调用'a.kill()'之前完成,会发生什么情况。这难道不是有可能会杀死另外一个被重新分配到与过去一样的PID的进程吗?你如何防止这一点? – Sukima

+1

也许是一个愚蠢的问题,但我是否总是需要在我的child_process上调用kill?我的代码中存在一个与内存有关的错误,并且认为可能是像这样疯狂的产生它... – superhero

+0

在Windows上,a.kill()不工作。 –

-2

怎么样使用退出事件,因此当主进程即将退出,你可以杀死child_process

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

'child_process'模块没有'kill'。 – Mitar

+0

http://nodejs.org/api/child_process.html#child_process_child_kill_signal – alfonsodev

+1

这是子进程对象,不是'child_process'模块。 – Mitar