孩子们为什么不能死?

时间:2012-08-13 21:33:03

标签: python linux multiprocessing

我希望terminate()方法可以杀死这两个进程:

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

运行代码给出:

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

我在期待:

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

1 个答案:

答案 0 :(得分:7)

因为terminate函数只发送SIGTERM信号进行处理,但是signals are asynchronous,所以你可以睡一段时间,或wait进程终止(信号接收)。

例如,如果在终止后添加字符串time.sleep(.1),则可能会终止它。