在作業系統領域中,孤兒進程指的是在其父進程執行完成或被終止後仍繼續運行的一類進程。這些孤兒進程將被init進程(進程號為1)所收養,並由init進程對它們完成狀態收集工作。
基本介紹
- 中文名:孤兒進程
- 分類:計算機/作業系統
簡介,孤兒進程與殭屍進程,
簡介
在類UNIX作業系統中,子進程是通過父進程創建的,子進程再創建新的進程。子進程的結束和父進程的運行是一個異步過程,即父進程永遠無法預測子進程 到底什麼時候結束。當一個父進程由於正常完成工作而退出或由於其他情況被終止,它的一個或多個子進程卻還在運行,那么那些子進程將成為孤兒進程。為避免孤兒進程退出時無法釋放所占用的資源而僵死,進程號為1的init進程將會接受這些孤兒進程,這一過程也被稱為“收養”(英語:re-parenting)。
孤兒進程與殭屍進程
殭屍進程:一個子進程在其父進程還沒有調用wait()或waitpid()的情況下退出。這個子進程就是殭屍進程。任何一個子進程(init除外)在exit()之後,並非馬上就消失掉,而是留下一個稱為殭屍進程(Zombie)的數據結構,等待父進程處理。這是每個 子進程在結束時都要經過的階段。如果子進程在exit()之後,父進程沒有來得及處理,那么保留的那段信息就不會釋放,其進程號就會一直被占用,但是系統所能使用的進程號是有限的,如果大量的產生僵死進程,將因為沒有可用的進程號而導致系統不能產生新的進程. 此即為殭屍進程的危害,應當避免。
孤兒進程:一個父進程退出,而它的一個或多個子進程還在運行,那么那些子進程將成為孤兒進程。孤兒進程將被init進程(進程號為1)所收養,並由init進程對它們完成狀態收集工作。孤兒進程是沒有父進程的進程,孤兒進程這個重任就落到了init進程身上,init進程就好像是一個民政局,專門負責處理孤兒進程的善後工作。每當出現一個孤兒進程的時候,核心就把孤 兒進程的父進程設定為init,而init進程會循環地wait()它的已經退出的子進程。這樣,當一個孤兒進程淒涼地結束了其生命周期的時候,init進程就會代表黨和政府出面處理它的一切善後工作。因此孤兒進程並不會有什麼危害。