#coding:utf-8
from multiprocessing import
process
import
time, os
defrun():
print('子'
, os.getpid())
if__name__ == '
__main__':
p = process(target=run)
p.start()
print('主'
, os.getpid())
time.sleep(1000)
一:殭屍程序(有害)任何乙個子程序(init除外)在exit()之後,並非馬上就消失掉,而是留下乙個稱為殭屍程序(zombie)的資料結構,等待父程序處理。這是每個子程序在結束時都要經過的階段。
如果子程序在exit()之後,父程序沒有來得及處理,這時用ps命令就能看到子程序的狀態是「z」。如果父程序能及時 處理,可能用ps命令就來不及看到子程序的殭屍狀態,
但這並不等於子程序不經過殭屍狀態。 如果父程序在子程序結束之前退出,則子程序將由init接管。init將會以父程序的身份對殭屍狀態的子程序進行處理。
二:孤兒程序(無害)
孤兒程序:乙個父程序退出,而它的乙個或多個子程序還在執行,那麼那些子程序將成為孤兒程序。孤兒程序將被init程序(程序號為1)所收養,並由init程序對它們完成狀態收集工作。
孤兒程序是沒有父程序的程序,孤兒程序這個重任就落到了init程序身上,init程序就好像是乙個民政局,專門負責處理孤兒程序的善後工作。每當出現乙個孤兒程序的時候,
核心就把孤 兒程序的父程序設定為init,而init程序會迴圈地wait()它的已經退出的子程序。這樣,當乙個孤兒程序淒涼地結束了其生命週期的時候,init程序就會代表黨和**出面
處理它的一切善後工作。因此孤兒程序並不會有什麼危害。
嚴格地來說,僵死程序並不是問題的根源,罪魁禍首是產生出大量僵死程序的那個父程序。因此,當我們尋求如何消滅系統中大量的僵死程序時,
答案就是把產生大 量僵死程序的那個元凶槍斃掉(也就是通過kill傳送sigterm或者sigkill訊號啦)。槍斃了元凶程序之後,它產生的僵死
程序就變成了孤兒進 程,這些孤兒程序會被init程序接管,init程序會wait()這些孤兒程序,釋放它們占用的系統程序表中的資源,這樣,這
些已經僵死的孤兒程序 就能瞑目而去了。
Python 孤兒程序與殭屍程序
from multiprocessing import process,current process import time,sys def func 孤兒程序,父程序早於子程序退出 print 子程序pid current process pid time.sleep 10 print 子程序退...
Python3之多程序join daemon
import os import time from multiprocessing import process,joinablequeue defproducer0 q for i in range 5 print s 生產了 s os.getpid i q.put i q.join defpr...
python3 程序池Pool 詳解
當需要建立的子程序數量不多時,可以直接利用multiprocessing中的process成生多個程序,但如果是上百甚至上千個目標,手動的去建立程序的工作量巨大,此時就可以用到multiprocessing模組提供的pool方法。初始化pool時,可以指定乙個最大程序數,當有新的請求提交到pool中...