在介紹殭屍程序和孤兒程序之前我們先了解一下程序的幾種狀態
程序狀態
1. r狀態 程序要麼在執行要麼在執行佇列中。
2. s狀態 睡眠狀態,程序在等待某事件完成(可被中斷)
3. d狀態 不可中斷的睡眠狀態(通常其在第等待io結的束)
4. t狀態 被停止的程序 (傳送訊號sigstop停止程序 sigcont讓程序繼續執行)
5. x狀態 程序已死 已被** kernel你的do_exit函式返回的狀態。
6. z狀態 殭屍程序
其他幾種程序狀態我們很容易理解,那麼什麼是殭屍程序呢?
殭屍程序就是當程序退出並且父程序(使用wait()系統呼叫)沒有讀取到子程序退出的返回**時就會產生殭屍程序。殭屍程序會以終止狀態保持在程序表中,並且會一直在等待父程序讀取退出狀態**,因為一直沒有接受狀態資訊而造成一直存在於記憶體當中。
在詳細說明殭屍程序之前我們首先介紹乙個指令
ps指令,ps + 以下指令
aux :檢視系統所有的程序資料
-a:所有的程序均顯示出來
-a:不與terminal有關的所有程序
-u:有效使用者相關的程序
-x:通常與a一起使用,可以列出較完整的資訊
-l:較長、較詳細地將該pid的資訊列出
通過ps指令我們可以觀察程序狀態,但是僅僅觀察程序狀態我們還不能明白的知道什麼是殭屍程序,下面我們再引入乙個指令kill
kill -l顯示所有kill下的訊號
而這裡我們只關注這幾個訊號
kill -1:sighup啟動被終止的程序,可讓該pid重新讀取自己的配置檔案
-9:sigkill殺死程序狀態(除了d)
-15:sigterm正常結束乙個程序
-18:sigcont繼續程序訊號
-19:sigstop暫停程序訊號
這個時候讓我們先模擬實現乙個殭屍程序
現在讓我們看看程序狀態
我們可以清楚地看到,當停下mytest執行狀態被停下之後父程序就變成了殭屍程序
那麼下面讓我們來看看孤兒程序是什麼?
孤兒程序:乙個父程序退出,而他的子程序還在執行,那麼子程序將會成為孤兒程序。孤兒程序將被init程序(程序號為1)所收養。
同樣的,讓我們去實現一下孤兒程序,來看看它的程序狀態
輸出結果
那這裡就很明顯了,孤兒程序已經被建立並且被程序號為1的程序init所收養
Linux 殭屍程序與孤兒程序
之前的部落格有講過儲存程序資訊的乙個重要的資料結構,task struct結構體,其中,state表示程序可能出現的狀態。如下 static const char const task state array 我們對個別狀態進行解釋如下 s sleeping 淺度睡眠,也是不可中斷睡眠。d disk...
Linux 殭屍程序與孤兒程序
產生原因 子程序先於父程序退出,他要保留退出原因在pcb中,因此退出後不會自動釋放所有資源,子程序退出後作業系統會通知父程序,子程序退出了,去獲取一下原因,然後完全釋放子程序資源,假如父程序不管子程序的退出狀態,那麼這個子程序將進入僵死狀態,成為殭屍程序 實現殭屍程序 該程式為20秒的殭屍程序,在第...
Linux 殭屍程序與孤兒程序
殭屍程序 產生原因 子程序先於父程序退出,他要保留退出原因在pcb中,因此退出後不會自動釋放所有資源,子程序退出後作業系統會通知父程序,子程序退出了,去獲取一下原因,然後完全釋放子程序資源,假如父程序不管子程序的退出狀態,那麼這個子程序將進入僵死狀態,成為殭屍程序 實現殭屍程序 該程式為20秒的殭屍...