這幾天同事寫的程式中出現了大量的殭屍程序,
幫忙分析了一下,問題出現在幾個方面:
首先top命令檢視殭屍程序數目
檢視所有的殭屍程序
殺死所有殭屍程序
ps -a -o stat,ppid,pid,cmd | grep -e '^[zz]' | awk '' | xargs kill -9
在程式中幾個注意的方面:
1.建立子程序後,父程序並未建立wait()或者waitpid()來**子程序,結果子程序正常退出或者異常退出都會成為zombie程序,從而導致資源浪費,除非編寫守護程序,在fork之後父程序便退出,此時無法呼叫wait()來獲取子程序狀態
2.在main中呼叫return,在其他地方呼叫exit()或者_exit()
3.管道通訊要記得呼叫close()關閉由pipe開啟的兩個檔案描述符。
4.父程序有多種方式來監護子程序,當乙個獲多個子程序狀態發生變化時,需要重啟這些子程序,在子程序中要把自己的id告訴父程序。
參考linux殭屍程序詳細解析及ps常見用法
殭屍程序並不會占用很多的資源。唯一的危害是影響了系統最大程序數。
如何檢視殭屍程序?
ps auwx;發現殭屍程序的狀態為z。
ps axf;看程序數,以樹的方式。
ps auwx | cut -c 10-15,45-50,63- | grep -i z 檢視殭屍程序pid、名稱和程序路徑。
git使用
git commit -m "create the code"
git push origin master
解決殭屍程序
linux下的殭屍程序,用kill 9 都不會消失,下面有一種辦法可以解決此問題 前些天發現有crontask程序死掉了,狀態為z,表明是殭屍程序了。通過下面的步驟可以解決它 1.用pstree命令查詢其父程序 5124 ss 0 00 crond 8884 s 0 00 crond 8893 zs...
程序等待 解決殭屍程序
這又得說到殭屍程序了 總結的來說,就是子程序退出,但是讓子程序幫忙做事的父程序一直不檢視子程序做事的結果,所以子程序進入殭屍狀態,我們可以通過殺死父程序來退出此狀態 但是很暴力 所以我們可以採取讓父程序等待,讓他記得要 子程序資源,獲取子程序的退出資訊。1 wait 方法 include inclu...
subprocess解決殭屍程序
由於父程序建立子程序是非同步的,雙方不知道各自的執行狀態,而父程序有的時候需要知道子程序退出時的一些資訊,所以 linux提供了一種機制,通過讓子程序退出時向父程序傳送 sigchrd 訊號來告知父程序,子程序已經退出了。同時,父程序通過呼叫 wait 和 waitpid 來獲取子程序的退出資訊。i...