首先我們來看看什麼是殭屍程序:
之前的學習過程中時這樣理解殭屍程序的:子程序先於父程序退出,並將退出原因保留在pcb中,因此退出後不會自動釋放所有資源,子程序退出後作業系統會通知父程序子程序退出了,你去獲取一下原因,再完全釋放子程序資源。若父程序不管子程序的退出狀態,則該子程序為了儲存退出原因而將進入僵死狀態,成為殭屍程序。
為了更好的理解,所以我寫了一段**
#include 6 #include 7 #include 8
9 int main()
10 else if (pid == 0) else
24 }
25 26 return 0;
27 }
~
由於父程序中有個死迴圈,所以父程序永遠不會終止,按理來說此時由於父程序沒有結束,所以子程序變為了乙個殭屍程序。所以我賦值了另乙個ssh渠道檢視時果然有乙個殭屍程序。(下圖中第二行最後面的1 zombie表示:此時有乙個殭屍程序)
上述檢視系統中是否有殭屍程序,是通過top命令檢視的(top命令是linux下常用的效能分析工具,能夠實時顯示系統中各個程序的資源占用狀況,常用於服務端效能分析。)
一般的發現殭屍程序後就需要將殭屍程序kill,因為殭屍程序會造成資源洩漏的問題。
此時,這個殭屍程序是我們自己寫的,但是當不是我們自己產生殭屍程序,該如何找到這個殭屍程序呢?
那麼就要通過命令 ps -aux | grep z 來查詢這個殭屍程序。
此時可以看到結尾的就是我們要找的,從中可以看到該殭屍程序的pid為8558,所以我們就可以用命令kill -9 8809來kill這個殭屍程序。
但是有的情況下時直接kill不了殭屍程序的,所以要通過kill其父程序的方法來間接的kill殭屍程序;
此時可以通過命名cat /proc/8809/status 檢視該殭屍程序的資訊。
可以看到殭屍程序的pid為8809;該殭屍程序的父程序的pid(即此處的ppid)為8808;所以此時用kill -9 8808就能將父程序kill掉,與此同時也將殭屍程序kill掉了;在用top檢視時,已經沒有殭屍程序了;
至此,將乙個殭屍程序找到並且kill,避免了殭屍程序造成的資源洩露的危害
檢視系統中是否有殭屍程序:top
查詢該殭屍程序:ps -aux|grep z// 以結尾的就是殭屍程序,此時也可看到殭屍程序的pid
根據殭屍程序的pid檢視殭屍程序的詳細資訊:cat /proc/殭屍程序的pid/status
kill乙個程序:kill -9 程序的pid
Linux系統中殭屍程序的產生原因及kill方法
在linux系統中,當用ps命令觀察程序的執行狀態時,可以看到某些程序的狀態列為defunct,這就是所謂的 殭屍 程序 一 如何檢視殭屍程序 使用ps ef grep z 命令 或者使用top命令 二 殭屍程序的產生原因 linux系統在程序表裡都有乙個進入點 entry 核心程式執行該程序時使用...
linux查詢殭屍程序 zombie程序
首先,我們可以用top命令來檢視伺服器當前是否有殭屍程序,可以看到第二行行尾有個 0 zombie,如果數字大於0,那麼意味著伺服器當前存在有殭屍程序 可以用ps和grep命令尋找殭屍程序 ps a ostat,ppid,pid,cmd grep e zz 命令選項說明 a 引數列出所有程序 o 自...
殭屍程序和如何刪除殭屍程序
當乙個子程序結束後,他的父程序沒有等待他 wait waitpid 清除他的所有資源時,它就變成乙個殭屍程序。在linux系統中,在每個程序退出的時候,核心釋放該程序所有的資源,包括開啟的檔案,占用的記憶體等。但是仍然為其保留一定的資訊 包括程序號the process id,退出狀態the ter...