node.js - node - mata a todo el proceso child_process cuando se mata el proceso del nodo
pm2 (2)
Necesitas escuchar el evento exit de proceso y luego matar los procesos secundarios. Esto debería funcionar para usted:
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();
});
¿Cómo me aseguro de que todos los procesos de child_process se eliminen cuando finaliza el proceso padre? Tengo algo como el de abajo.
Incluso cuando el proceso del nodo está inactivo, veo que FFMPEG continúa ejecutándose y se genera el out.avi. ¿Cómo puedo evitar que FFMPEG se ejecute después de que finalice el proceso del nodo?
var args = "ffmpeg -i in.avi out.avi"
child_process.exec(args , function(err, stdout,stderr){});
child_process.exec(args , function(err, stdout,stderr){});
Podría escuchar el evento del proceso de salida, por lo que cuando el proceso principal está a punto de salir, tiene tiempo de llamar al método kill en el proceso hijo ffmpeg
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();
});
Edit : como los comentarios se mencionan y la solución de fakewaffle está bien, kill no se debe llamar en child_process sino en la referencia al proceso hijo que se obtiene al realizar exec.
También elimino el "what a about ..." porque era innecesario y, sin quererlo, me doy cuenta de que estaba sonando duro cuando lo leí en voz alta.