2013-08-16 16 views
17

Jak upewnić się, że wszystkie child_process są zabijane, gdy proces nadrzędny jest zabity. Mam coś takiego jak poniżej.zabij wszystkie procesy child_process, gdy proces węzłowy zostanie zabity

Nawet gdy proces węzłowy jest zabity, widzę, że FFMPEG nadal działa, a out.avi jest generowany. Jak zatrzymać FFMPEG przed uruchomieniem po zakończeniu procesu węzła.

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

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

Odpowiedz

23

musisz wykrywać zdarzenie wyjścia proces i zabić procesy potomne następnie. To powinno zadziałać:

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

Co się stanie, jeśli proces "a" zakończy się, zanim główny proces wyzwoli zdarzenie 'exit' i wywołanie funkcji' a.kill() '. Czy nie ma możliwości, że może * zabić * inny proces, który został ponownie przypisany do tego samego PID, który był kiedyś "a"? Jak temu zapobiec? – Sukima

+1

Może to głupie pytanie, ale czy zawsze muszę inwokować zabójstwo w moim child_process? Mam błąd w moim kodzie związany z pamięcią i myślę, że może coś szalonego jak to generuje ... – superhero

+0

W systemie Windows, a.kill() nie działa. –

-2

co użycie zdarzenia wyjścia, więc kiedy główny proces ma się zakończyć możesz zabić child_process

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

Moduł 'child_process' nie ma' kill'. – Mitar

+0

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

+1

To jest obiekt procesu potomnego, a nie moduł 'child_process'. – Mitar

Powiązane problemy