Linux 殭屍程序與孤兒程序

2021-09-23 22:31:34 字數 1138 閱讀 3688

什麼是殭屍程序?

處於僵死狀態的程序-----(危害)會造成資源洩漏

殭屍程序的產生原因:子程序先於父程序退出,因為要保留退出原因,因此作業系統不能直接釋放所有資源,通知父程序獲取退出原因,允許作業系統釋放資源,但是父程序沒有關注這個通知導致子程序退出後無法釋放所有資源,處於僵死狀態成為殭屍程序。

如何避免:程序等待

出現了殭屍程序如何處理:結束掉父程序,殭屍程序也就結束了。

**模擬:

執行此程式,然後我們使用命令ps來檢視程序,具體如下:我們可以看出此時父程序的pid為3946,而子程序的pid為3947。

然後我們結束掉子程序:使用命令kill+該程序的pid

然後我們可以看到此時子程序並沒有消失,而是狀態由s+變為了z+,成為了乙個殭屍程序。如果此時結束父程序,那麼這個殭屍程序就會消失。

孤兒程序的產生原因:父程序先於子程序退出,子程序就會成為孤兒程序,執行在後台,父程序成為1號程序。

**模擬:此處**與上面殭屍程序的**一樣,我們直接往下看。

我們執行程式,並檢視程序資訊,可以發現此時父程序的pid是4006,子程序的pid是4007,然後我們結束掉父程序,父程序直接消失了,而子程序的狀態變成了s,沒有了「+」,此時執行在後台了。

我們再檢視此時程序的詳細資訊,可以發現,此時該子程序的父程序成為了1號程序。

Linux 殭屍程序與孤兒程序

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

Linux 殭屍程序與孤兒程序

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

Linux 殭屍程序與孤兒程序

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