2013-08-16 58 views
17

Làm cách nào để đảm bảo tất cả child_process đều bị giết khi quá trình cha mẹ bị giết. Tôi có một cái gì đó giống như dưới đây.giết tất cả child_process khi quá trình nút bị giết

Ngay cả khi quá trình nút bị giết, tôi thấy rằng FFMPEG tiếp tục chạy và tệp out.avi được tạo. Làm thế nào tôi có thể ngừng FFMPEG chạy sau khi thoát khỏi quá trình nút.

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

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

Trả lời

23

Bạn cần phải lắng nghe cho sự kiện quá trình thoát và tiêu diệt các tiến trình con sau đó. Điều này sẽ phù hợp với bạn:

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

Điều gì xảy ra nếu quá trình 'a' kết thúc trước khi quá trình chính kích hoạt sự kiện' thoát' và 'a.kill()' được gọi. Sẽ không có khả năng nó có thể giết * một quá trình khác được gán lại cho cùng một PID mà 'a' từng là? Làm thế nào để bạn ngăn chặn điều này? – Sukima

+1

Có lẽ một câu hỏi ngu ngốc, nhưng tôi có luôn luôn cần phải gọi kill trên child_process của tôi? Tôi có một lỗi trong mã của tôi liên quan đến bộ nhớ, và nghĩ rằng có thể một cái gì đó điên như thế là tạo ra nó ... – superhero

+0

Trên Windows, a.kill() không hoạt động. –

-2

gì về để sử dụng các sự kiện xuất cảnh, nên khi quá trình chính là sắp thoát khỏi bạn có thể giết chết child_process

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

mô-đun 'child_process' không có' kill'. – Mitar

+0

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

+1

Đó là đối tượng quy trình con, không phải là mô-đun 'child_process'. – Mitar

Các vấn đề liên quan