孤兒進程:
#父進程在子進程還在運行前退出,最后會被init進程接管,init以父進程的身份處理子進程運行完畢后遺留狀態信息
僵屍進程:
#一直創建子進程,不回收子進程運行完畢后的狀態信息,從而導致大量的僵屍進程,不能產生新的進程
孤兒進程:一個父進程退出,而父進程還要多個子進程還在運行,那么這么子進程將成為孤兒進程。孤兒進程被init進程(進程號為1)所收養,並由init進程對它們完成狀態收集工作,init將會以父進程的身份對僵屍狀態的子進程進行處理。
任何一個子進程(init除外)在exit()之后,並非馬上就消失掉,而是留下一個稱為僵屍進程(Zombie)的數據結構,等待父進程處理。
如果父進程在子進程結束之前退出,則子進程將由init接管。init將會以父進程的身份對僵屍狀態的子進程進行處理。
"""
"""
僵屍進程:一個進程使用fork創建子進程,如果子進程退出,而父進程並沒有調用wait或waitoid獲取子進程的狀態信息,那么子進程的進程描述符仍然保存着系統中,這種進程稱為僵屍進程
如果進程不調用wait / waitpid的話, 那么保留的那段信息就不會釋放,其進程號就會一直被占用,但是系統所能使用的進程號是有限的,如果大量的產生僵死進程,將因為沒有可用的進程號而導致系統不能產生新的進程. 此即為僵屍進程的危害,應當避免。
詳情點擊:孤兒進程與僵屍進程詳解