模擬實現殭屍程序和孤兒程序

2021-09-25 13:08:31 字數 1014 閱讀 9513

首先我們來先了解一下什麼是殭屍程序和孤兒程序?

當你建立了子程序後,讓父子程序幹不同的事,如果,子程序先完成事情要退出時,然後它就會等『人』來讀取它的退出狀態資訊(也就是他的父程序),這個時候,子程序就需要一直維持這這個狀態,這個狀態就是殭屍狀態(我們也稱為z狀態)。也就是說,當乙個子程序退出時,他的父程序還沒有退出,它就會一直等待父程序來讀取它的退出資訊,這個時候子程序就處於殭屍狀態。

那麼如果,是父程序先幹完自己的事呢?當父程序先退出,子程序還沒有退出,那麼這個子程序就會成為乙個『孤兒』程序,那麼這個子程序的資訊一定得有乙個程序來讀取,則該子程序會被init程序(程序id為1 的那個程序,我們經常叫他一號程序)領養,當它退出時,也由init程序讀取它的退出資訊。

這裡再談談殭屍程序,當子程序先退出時,它必須要等父程序來接收它的資訊,告訴父程序它把工作完成的怎麼樣了,這個時候它還占有pcb資源,在父程序沒來之前,它要一直占有資源,維持儲存它的資訊。我們試想,如果殭屍程序比較多,那麼勢必會有資源的浪費,也存在資源洩露的問題,其實很糟糕的。

下面就來實現殭屍程序和孤兒程序:

#include

#include

#include

intmain()

else

if(id>0)

else

perror

("fork false");

return0;

}

孤兒程序:

#include

#include

#include

intmain()

else

if(id>0)

else

perror

("fork false");

return0;

}

在linux下執行結果:可見,子程序被1號程序領養了。

模擬實現殭屍程序和孤兒程序

殭屍程序 乙個子程序在其父程序沒有呼叫wait 或waitpid 的情況下退出。這個子程序就是殭屍程序。程序在終止時,系統會 所有核心分配給它的記憶體 關閉它開啟的所有檔案等等,但還會保留一些極少的資訊,因為 程序終止後有些資訊對於父程序和核心還是很有用的,例如程序的id號 程序的退出狀態 程序執行...

模擬實現殭屍程序, 孤兒程序

在linux下程序有多種狀態以下就是我列舉的一些狀態 r執行狀態 running 並不意味著程序一定在執行中,它表明程序要麼在執行中要麼在執行佇列裡。s睡眠狀態 sleeping 意味著程序在等待事件的完成 這裡的睡眠有時候也會叫可中斷睡眠 interruptible sleep d磁碟休眠狀態 d...

模擬實現殭屍程序, 孤兒程序

殭屍狀態是乙個比較特殊的狀態。當程序退出並且父程序 使用wait 系統呼叫 沒有讀取到子程序退出的返回 時就會產生殭屍程序。殭屍程序會終止狀態保持在程序表中,並且會一直在等待父程序讀取退出狀態 所以,只要子程序退出,父程序還在執行,但父程序沒有讀取子程序狀態,子程序進入z狀態。從上圖我們可以看出,1...