父進程先終止:
UNIX系統保證每個進程都有一個父進程,若父進程比子進程先終止,則該父進程的所有子進程的父進程都改變為init進程。我們稱這些進程由init進程領養。其執行順序大致如下:在一個進程終止時,內核逐個檢查所有活動進程,以判斷它是否是正要終止的進程的子進程,如果是,則該進程的父進程ID就更改為1(init進程的ID);
子進程先終止:
內核為每個終止子進程保存了一定量的信息,所以當終止進程的父進程調用wait或waitpid時,可以得到有關信息。這種信息至少包括進程ID、該進程的終止狀態、該進程使用的CPU時間總量。
一個已經終止、但是其父進程尚未對其進行善后處理(獲取終止子進程的有關信息,釋放它仍占有的資源)的進程被稱為僵死進程。ps(1)命令將僵死進程的狀態打印為Z。
有init領養的進程不會稱為僵死進程,因為只要init的子進程終止,init就會調用一個wait函數取得其終止狀態。這樣也就防止了在系統中有很多僵死進程。