有人可以帮我理解为什么我的代码执行了两次?
import multiprocessing
from time import sleep
import os, signal
def neverEnding():
while True:
print ' Looping ... '
sleep(3)
p = multiprocessing.Process(target=neverEnding)
p.start()
sleep(10)
print p.is_alive()
print p.pid
p.terminate()
print p.is_alive()
print 'terminated?'
os.kill(int(p.pid), signal.SIGTERM)
print 'Now?'
sleep(3)
print p.is_alive()
这是我得到的输出。
Looping ...
Looping ...
Looping ...
Looping ...
True
8999
True
terminated?
Now?
False
Looping ...
Looping ...
Looping ...
Looping ...
True
9000
True
terminated?
Now?
False
我被'终止?','现在?'等...打印两次。
有人可以解释为什么会这样吗?
其他进程是否会在后台运行? (之前我使用子进程运行了相同的脚本)
我正在使用Ubuntu。
答案 0 :(得分:0)
你使用哪个python版本?我在linux上使用2.6.9,与你的代码相同但获得了不同的结果:
*Looping ...
Looping ...
Looping ...
Looping ...
True
6634
True
terminated?
Now?
False*
为什么在“p.terminate()”之后该过程仍然存在的问题是由于 父进程无法快速获得子进程状态。 如果我在其间添加一个睡眠(0.1):
p.terminate()
sleep(0.1)
print p.is_alive()
我得到以下结果:
Looping ...
Looping ...
Looping ...
Looping ...
True
7046
False
terminated?
Traceback (most recent call last):
File "./test_m.py", line 24, in <module>
os.kill(int(p.pid), signal.SIGTERM)
OSError: [Errno 3] No such process
子进程终止,因此os.kill(int(p.pid),signal.SIGTERM)出错!