殭屍程序
產生原因
子程序先於父程序退出,他要保留退出原因在pcb中,因此退出後不會自動釋放所有資源,子程序退出後作業系統會通知父程序,子程序退出了,去獲取一下原因,然後完全釋放子程序資源,假如父程序不管子程序的退出狀態,那麼這個子程序將進入僵死狀態,成為殭屍程序
**實現殭屍程序
//該程式為20秒的殭屍程序,在第10秒時變為殭屍程序,30秒時退出
#include
#include
#include
#include
int main()
else if(pid == 0)//fork返回值為零時,是在子程序中
else//在父程序中,fork的返回值是建立出的子程序的pid
return 0;}1
2345
6789
1011
1213
1415
1617
1819
2021
2223
2425
2627
2829
3031
此圖是在程式執行10秒內的程序資訊,可以看出父子程序此時都是s狀態,也就是睡眠態
此圖是程式執行10秒後到20秒內的程序資訊,此時的父程序還是睡眠狀態,而子程序已經變為殭屍態,此時的父程序就是殭屍程序
孤兒程序
產生原因
父程序先於子程序退出
此時父程序變為init程序,也就是說,父程序退出了,init程序將負責釋放資源,init程序非常負責任,因此,孤兒程序不會成為殭屍程序
**實現
#include
#include
#include
int main()
else if (pid > 0)
else
return 0;}1
2345
6789
1011
1213
1415
1617
1819
2021
2223
2425
26此圖為10秒前,此時未成為孤兒程序,父程序pid為4764,子程序pid為4765
Linux 殭屍程序與孤兒程序
之前的部落格有講過儲存程序資訊的乙個重要的資料結構,task struct結構體,其中,state表示程序可能出現的狀態。如下 static const char const task state array 我們對個別狀態進行解釋如下 s sleeping 淺度睡眠,也是不可中斷睡眠。d disk...
Linux 殭屍程序與孤兒程序
產生原因 子程序先於父程序退出,他要保留退出原因在pcb中,因此退出後不會自動釋放所有資源,子程序退出後作業系統會通知父程序,子程序退出了,去獲取一下原因,然後完全釋放子程序資源,假如父程序不管子程序的退出狀態,那麼這個子程序將進入僵死狀態,成為殭屍程序 實現殭屍程序 該程式為20秒的殭屍程序,在第...
Linux 殭屍程序與孤兒程序
殭屍程序 乙個程序使用 fork 建立子程序,如果子程序退出而父程序並沒有呼叫 wait 或者 waitpid 獲取子程序資訊,那麼子程序的描述符仍然儲存在系統中。這種程序就被稱為殭屍程序 即 z 程序 危害及解決辦法 乙個程序會定期的產生一些子程序,這些子程序由於處理的事情很少並且處理完後會退出,...