簡體   English   中英

無需在python中收獲僵屍進程嗎?

[英]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 ,我看到了

  1. Process.start() ,有一個_current_process._children.add(self)將啟動的進程添加到列表/集合/任何內容,
  2. 在上面的幾行中,有一個_cleanup()它將輪詢並丟棄終止的進程,從而刪除僵屍。

但這並不能解釋為什么您的代碼不會產生僵屍,因為孩子們會在等待終止之前等待一會兒,因此父級的start()調用尚未注意到這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM