在Ubuntu 14.04上使用python3(3.4.3),我創建了一個Forker
類,我在兩個不同的進程中使用它來創建子進程。下面是Forker
類:如何避免在Linux中停止python進程?
class Forker(object):
def __init__(self):
self.active_children = []
def reap_children(self):
while self.active_children:
pid,stat = os.waitpid(0, os.WNOHANG)
if not pid: break
self.active_children.remove(pid)
def fork(self, function, *args, **kwargs):
self.reap_children()
child_pid = os.fork()
if child_pid == 0:
function(*args, **kwargs)
os._exit(0)
else:
self.active_children.append(child_pid)
return child_pid
在兩個不同的Linux進程我從這個類派生,然後調用如是這樣的:
self.fork(my_function, my_data)
但是,我仍然得到一對夫婦停止活動蟒蛇過程:
alexand+ 24777 24735 0 20:40 pts/29 00:00:00 [python3] <defunct>
alexand+ 24838 24733 0 20:40 pts/29 00:00:00 [python3] <defunct>
也許有什麼東西我可以改變,以避免這些死進程?
可能是父進程在殺死所有孩子之前死亡。你確定所有的孩子都被殺死了嗎? – Devavrata
我相信父進程不會被殺死!他們在開始後仍然跑步。 – Alex