Linux系統中殺死殭屍程序的方法

2021-08-14 15:20:29 字數 869 閱讀 1685

在linux系統管理中,當用ps命令觀察程序的執行狀態時,經常看到某些程序的狀態列為defunct,這就是所謂的「殭屍」程序。「殭屍」程序是乙個早已 死亡的程序,但在程序表(processs table)中仍佔了乙個位置(slot)。由於程序表的容量是有限的,所以,defunct程序不僅占用系統的記憶體資源,影響系統的效能,而且如果其數 目太多,還會導致系統癱瘓。

我們知道,每個linux程序在程序表裡都有乙個進入點(entry),核心程式執行該程序時使用到的一切資訊都儲存在進入點。當用ps命令察看系統中的程序資訊時,看到的就是程序表中的相關資料。當以fork()系統呼叫建立乙個新的程序後,核心程序就會在程序表中給這個新程序分配乙個進入點,然後將相關資訊儲存在該進入點所對應的程序表內。這些資訊中有一項是其父程序的識別碼。當這個程序走完了自己的生命週期後,它會執行exit()系統呼叫,此時原來進 程表中的資料會被該程序的退出碼(exit code)、執行時所用的cpu時間等資料所取代,這些資料會一直保留到系統將它傳遞給它的父程序為止。由此可見,defunct程序的出現時間是在子進 程終止後,但是父程序尚未讀取這些資料之前。

defunct程序是不能直接kill -9殺掉的,否則就不叫殭屍程序了。

知道了defunct程序產生的原因,就可以輕易的kill掉defunct程序。

方法有二:

1,重啟伺服器電腦,這個是最簡單,最易用的方法,但是如果你伺服器電腦上執行有其他的程式,那麼這個方法,代價很大。

所以,盡量使用下面一種方法。

2,找到該defunct殭屍程序的父程序,將該程序的父程序殺掉,則此defunct程序將自動消失。

如何找到defunct殭屍程序的父程序?很簡單,一句命令就夠了:ps -ef | grep defunct_process_pid。

殺死linux的殭屍程序

linux並不把程序的樹形結構匯出給普通使用者,然而在核心中,它卻使用樹形結構來管理程序。linux核心使用 子程序退出,父程序收屍,父程序退出,子程序被過繼 這種方式來管理程序的死亡,然而卻少了一種,那就是父程序不給子程序收屍的情況,這就是殭屍程序的原因。既然知道了殭屍程序為何產生,那麼想乾掉它們...

Linux尋找並殺死殭屍程序

linux伺服器上,多少會出現一些殭屍程序,下面介紹如何快速尋找和消滅這些殭屍程序的方法 首先,我們可以用top命令來檢視伺服器當前是否有殭屍程序,在下圖中可以看到殭屍程序數的提示,如果數字大於0,那麼意味著伺服器當前存在有殭屍程序 下面,我們用ps和grep命令尋找殭屍程序 ps a ostat,...

Linux查詢並殺死殭屍程序

1 檢視系統是否有殭屍程序 使用 top命令 使用top命令查詢,當zombie前的數量不為0時,即系統內存在相應數量的殭屍程序。2 定位殭屍程序 使用命令ps a ostat,ppid,pid,cmd grep e zz 定位殭屍程序以及該殭屍程序的父程序 殭屍程序id 3457,父程序id 34...