父進程子進程先后終止的不同處理


父進程先終止:

UNIX系統保證每個進程都有一個父進程,若父進程比子進程先終止,則該父進程的所有子進程的父進程都改變為init進程。我們稱這些進程由init進程領養。其執行順序大致如下:在一個進程終止時,內核逐個檢查所有活動進程,以判斷它是否是正要終止的進程的子進程,如果是,則該進程的父進程ID就更改為1(init進程的ID);

子進程先終止:

內核為每個終止子進程保存了一定量的信息,所以當終止進程的父進程調用wait或waitpid時,可以得到有關信息。這種信息至少包括進程ID、該進程的終止狀態、該進程使用的CPU時間總量。

一個已經終止、但是其父進程尚未對其進行善后處理(獲取終止子進程的有關信息,釋放它仍占有的資源)的進程被稱為僵死進程。ps(1)命令將僵死進程的狀態打印為Z。

有init領養的進程不會稱為僵死進程,因為只要init的子進程終止,init就會調用一個wait函數取得其終止狀態。這樣也就防止了在系統中有很多僵死進程。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM