Linux 殭屍程序與孤兒程序

2021-08-31 03:51:32 字數 1153 閱讀 2016

產生原因

子程序先於父程序退出,他要保留退出原因在pcb中,因此退出後不會自動釋放所有資源,子程序退出後作業系統會通知父程序,子程序退出了,去獲取一下原因,然後完全釋放子程序資源,假如父程序不管子程序的退出狀態,那麼這個子程序將進入僵死狀態,成為殭屍程序

**實現殭屍程序

//該程式為20秒的殭屍程序,在第10秒時變為殭屍程序,30秒時退出

#include #include #include #include int main()

else if(pid == 0)//fork返回值為零時,是在子程序中

else//在父程序中,fork的返回值是建立出的子程序的pid

return 0;

}

此圖是在程式執行10秒內的程序資訊,可以看出父子程序此時都是s狀態,也就是睡眠態

此圖是程式執行10秒後到20秒內的程序資訊,此時的父程序還是睡眠狀態,而子程序已經變為殭屍態,此時的父程序就是殭屍程序

產生原因

父程序先於子程序退出

此時父程序變為init程序,也就是說,父程序退出了,init程序將負責釋放資源,init程序非常負責任,因此,孤兒程序不會成為殭屍程序

**實現

此圖為10秒前,此時未成為孤兒程序,父程序pid為4764,子程序pid為4765

從上圖中可以看出父程序已經退出了,pid為4765的程序其父程序的pid為1,也就是其父程序變為init程序,此時已經成為孤兒程序,最終init程序在子程序結束後將負責釋放其資源

Linux 殭屍程序與孤兒程序

之前的部落格有講過儲存程序資訊的乙個重要的資料結構,task struct結構體,其中,state表示程序可能出現的狀態。如下 static const char const task state array 我們對個別狀態進行解釋如下 s sleeping 淺度睡眠,也是不可中斷睡眠。d disk...

Linux 殭屍程序與孤兒程序

殭屍程序 產生原因 子程序先於父程序退出,他要保留退出原因在pcb中,因此退出後不會自動釋放所有資源,子程序退出後作業系統會通知父程序,子程序退出了,去獲取一下原因,然後完全釋放子程序資源,假如父程序不管子程序的退出狀態,那麼這個子程序將進入僵死狀態,成為殭屍程序 實現殭屍程序 該程式為20秒的殭屍...

Linux 殭屍程序與孤兒程序

殭屍程序 乙個程序使用 fork 建立子程序,如果子程序退出而父程序並沒有呼叫 wait 或者 waitpid 獲取子程序資訊,那麼子程序的描述符仍然儲存在系統中。這種程序就被稱為殭屍程序 即 z 程序 危害及解決辦法 乙個程序會定期的產生一些子程序,這些子程序由於處理的事情很少並且處理完後會退出,...