2012-08-13 59 views
11

tôi mong đợi các phương pháp terminate() để giết hai quá trình:Tại sao trẻ em không chết?

import multiprocessing 
import time 

def foo(): 
    while True: 
     time.sleep(1) 

def bar(): 
    while True: 
     time.sleep(1) 

if __name__ == '__main__': 
    while True: 
     p_foo = multiprocessing.Process(target=foo, name='foo') 
     p_bar = multiprocessing.Process(target=bar, name='bar') 
     p_foo.start() 
     p_bar.start() 
     time.sleep(1) 
     p_foo.terminate() 
     p_bar.terminate() 
     print p_foo 
     print p_bar 

Chạy mã cho:

<Process(foo, started)> 
<Process(bar, started)> 
<Process(foo, started)> 
<Process(bar, started)> 
... 

tôi đã mong đợi:

<Process(foo, stopped)> 
<Process(bar, stopped)> 
<Process(foo, stopped)> 
<Process(bar, stopped)> 
... 
+17

+1 cho dòng tiêu đề hay. Có thể là tiêu đề của một kỷ lục kim loại nặng. – log0

+4

Quá trình xử lý luôn luôn làm cho những nhận xét khó xử tuyệt vời này về việc trẻ em sắp chết biến thành zombie, giết cha mẹ và đồ vật của chúng. Thật tuyệt vời xD – poke

Trả lời

7

terminate chức năng chỉ cần gửi tín hiệu SIGTERM để xử lý, nhưng signals are asynchronous, vì vậy bạn có thể ngủ một lúc hoặc wait cho quá trình chấm dứt (nhận tín hiệu). Ví dụ: nếu bạn thêm chuỗi time.sleep(.1) sau khi chấm dứt, nó có thể sẽ bị chấm dứt.

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