父子程序終止順序與僵死程序

2021-07-07 02:39:59 字數 586 閱讀 2326

在linux_父子程序與fork一文中,我們知道子程序是在父程序呼叫fork之後生成的。那麼關於父子程序終止先後順序又會有什麼影響呢?

對於父程序已經終止的所有程序,它們的父程序都改變為init程序。我們稱這些程序由init程序收養。其操作過程大致是:在乙個程序終止時,核心逐個檢查所有活動的程序,以判斷它是否是是要終止程序的子程序,如果是,則該程序父程序id就更改為1(init程序的id)。

如果子程序在父程序之前終止時,核心為每個終止的子程序儲存了一定量的資訊,所以當終止程序的父程序呼叫wait或waitpid時,可以得到這些資訊。核心可以釋放終止程序所使用的所有儲存區,關閉其所有開啟檔案,但至少會儲存包括程序id、該程序的終止狀態以及該程序使用的cpu時間總量等資訊。

乙個已經終止、但是其父程序尚未對其進行善後處理(獲取終止子程序的有關資訊、釋放它仍占用的資源)的程序被稱為僵死程序。

ps命令將僵死程序的狀態列印為z。

那麼乙個由init程序收養的程序終止時會發生什麼?它會不會變成乙個僵死程序?

答案是否定的。init程序的實現決定無論何時只要有乙個子程序終止,init就會呼叫乙個wait函式取得其終止狀態,無論是收養的程序還是init直接產生的子程序。

僵死程序與孤兒程序

1.僵死程序與孤兒程序 僵死程序 程序已經退出,但是沒有 核心 pcb 資源的程序叫僵死程序。孤兒程序 父親程序先於子程序退出後,這個子程序就是孤兒程序,父親程序會被轉移為 init pid 1 程序。僵死程序示例 include include include apue.h include voi...

linux僵死程序

乙個程序在呼叫exit命令結束自己的生命的時候,其實它並沒有真正的被銷毀,而是留下乙個稱為僵死程序 zombie 的資料結構 系統呼叫exit,它的作用是使程序退出,但也僅僅限於將乙個正常的程序變成乙個僵死程序,並不能將其完全銷毀 一 僵死程序的產生 在每個程序退出的時候,核心釋放該程序所有的資源,...

linux僵死程序

乙個程序在呼叫exit命令結束自己的生命的時候,其實它並沒有真正的被銷毀,而是留下乙個稱為僵死程序 zombie 的資料結構 系統呼叫exit,它的作用是使程序退出,但也僅僅限於將乙個正常的程序變成乙個僵死程序,並不能將其完全銷毀 一 僵死程序的產生 在每個程序退出的時候,核心釋放該程序所有的資源,...