Linux殭屍程序和孤兒程序

2021-08-17 01:43:46 字數 964 閱讀 9190

程式執行到結尾的時候,有兩種情況。子程序先退出,或者父程序先退出。

如果父程序先退出的話,那麼子程序就會變成孤兒程序,最後被init接管,我們來看乙個例子。

我們可以看到子程序的父程序變成了init,孤兒程序並不可怕,它們最後會被統一銷毀。
但是如果子程序先退出呢?子程序先退出有兩種情況:

1.呼叫wait()

2.沒呼叫wait()

第一種情況: 子程序正在占用資源,父程序阻塞,等待子程序結束。

注意:只要有子程序終止,wait()就會返回,對於擁有兩個或者兩個以上的子程序的父程序來說,要呼叫

兩次或兩次以上wait()

第二種情況: 子程序進入僵死狀態並一直持續下去直到關機或者父程序結束,因為當乙個程序結束的時候

,系統就會掃瞄所有的程序,檢視是否有該程序的子程序,如果有的話,則由init收養。我們來看乙個例

子:

#include 

#include

#include

#include

#include

int main(void)

return

0;}

這是兩個程序的id,我們使用ps aux來檢視一下程序的狀態

我們發現子程序結束後,變成了殭屍程序。等到我們把父程序結束之後,我們再使用一次ps aux檢視程序狀態

我們發現已經找不到子程序和父程序了

殭屍程序和孤兒程序

殭屍程序 乙個子程序在其父程序還沒有呼叫wait 或waitpid 的情況下退出。這個子程序就是殭屍程序。孤兒程序 乙個父程序退出,而它的乙個或多個子程序還在執行,那麼那些子程序將成為孤兒程序。孤兒程序將被init程序 程序號為1 所收養,並由init程序對它們完成狀態收集工作。殭屍程序將會導致資源...

殭屍程序和孤兒程序

什麼是殭屍程序?乙個子程序在其父程序沒有呼叫wait 或waitpid 的情況下退出。這個子程序就是殭屍程序。如果其父程序還存在而一直不呼叫wait,則該殭屍程序將無法 等到父程序結束後,會被init 驗證 include include includeint main 3秒後查詢其程序資訊 通過上...

殭屍程序和孤兒程序

殭屍程序和孤兒程序 在unix系統程式設計中,常常會碰到兩個概念 僵死程序和孤兒程序 僵死程序 在unix程序模型中,程序是按照父程序產生子程序,子程序產生子子程序這樣的方式建立出完成各項相互協作功能的程序的。當乙個程序完成它的工作終止之後,它的父程序需要呼叫wait 或者waitpid 系統呼叫取...