[英]Is there no need to reap zombie process in python?
在Python中,似乎不需要收獲僵屍進程。
例如,在以下代碼中
import multiprocessing
import time
def func(msg):
time.sleep(2)
print "done " + str(msg)
if __name__ == "__main__":
for i in range(10):
p = multiprocessing.Process(target=func, args=('3'))
p.start()
print "child"+str(i)
print "parent"
time.sleep(100)
當所有子進程都退出時,父進程仍在運行,這時,我使用ps -ef
檢查了該進程,並發現沒有失效的進程。
這是否意味着在Python中無需獲得僵屍進程?
這些進程實際上不是僵屍,因為它們應該成功終止。 您可以將子進程設置為消聲級,這樣,如果主進程終止,它們將終止。
看了一下庫-特別是multiprocessing/process.py
,我看到了
Process.start()
,有一個_current_process._children.add(self)
將啟動的進程添加到列表/集合/任何內容, _cleanup()
它將輪詢並丟棄終止的進程,從而刪除僵屍。 但這並不能解釋為什么您的代碼不會產生僵屍,因為孩子們會在等待終止之前等待一會兒,因此父級的start()
調用尚未注意到這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.