殭屍程序與孤兒程序

2021-07-30 13:50:28 字數 711 閱讀 2762

殭屍程序:如果乙個程序通過fork()建立子了乙個程序,當子程序退出而父程序還沒有呼叫wait/waitpid來儲存子程序的狀態且**它,此時子程序的狀態描述資訊仍然保留在系統中,稱這類程序為殭屍程序;;殭屍程序的優點是方便上層程序得知子程序的退出狀態,但是如果不及時**會造成記憶體洩露;

孤兒程序:當乙個父程序已經推出,而他的乙個或多個子程序還在執行,則稱這些子程序為孤兒程序,孤兒程序被初始化程序init(程序號為1)領養,並用初始化程序對其進行狀態收集。

給子程序加上exit()退出後成為殭屍程序,呼叫system("ps -o pid,ppid,state")可以看出子程序狀態變為z;

結果顯示

和殭屍程序的驗證方法類似,在子程序退出前退出父程序,由以下截圖可以看出子程序成為孤兒程序後被一號程序領養;

**驗證:

結果:擷取man atexit命令中對atexit的描述:

1,註冊的函式將在程式結束之後呼叫:atexit - register a function to be called at normal process termination

2,函式原型:int atexit(void (*function)(void));

3,函式註冊順序與呼叫順序相反:registered are called in the reverse order of their

registration; no arguments are passed.

殭屍程序與孤兒程序

孤兒程序是指在程序還未退出之前它的父程序就已經先退出了,簡單來說就是乙個沒有父程序的子程序就是孤兒程序。既然所有的程序都必須在退出之後被父程序的wait 或waitpid 以釋放其遺留在系統中的一些資源,那麼孤兒程序的這些東西又誰來處理呢?這個任務就落到了init程序的身上,init程序就好像乙個收...

殭屍程序與孤兒程序

在父程序執行wait 之前,其子程序就已終止,即使子程序終止,系統也允許父程序在以後的某個時刻去執行wait 以確定子程序是如何終止。核心通過將子程序轉為殭屍程序,以釋放其占用的系統資源,供其他程序使用,該程序唯一保留的是系統pcb中的一條記錄,其中包含了子程序的id,終止狀態,和資源使用的資料。當...

殭屍程序與孤兒程序

unix linux中,正常情況下,子程序是通過父程序建立的,子程序再建立新的程序。子程序的結束和父程序的執行是乙個非同步過程,即父程序永遠無法 子程序到底什麼時候結束。當乙個 程序完成它的工作終止之後,它的父程序需要呼叫wait 或者waitpid 系統呼叫取得子程序的終止狀態。unix提供了一種...