在unix系統管理中,當用ps命令觀察程序的執行狀態時,經常看到某些程序的狀態列為defunct,這就是所謂的「殭屍」程序。「殭屍」程序是乙個早已死亡的程序,但在程序表(processstable)中仍佔了乙個位置(slot)。由於程序表的容量是有限的,所以,defunct程序不僅占用系統的記憶體資源,影響系統的效能,而且如果其數目太多,還會導致系統癱瘓。
我們知道,每個unix程序在程序表裡都有乙個進入點(entry),核心程式執行該程序時使用到的一切資訊都儲存在進入點。當用ps命令察看系統中的程序資訊時,看到的就是程序表中的相關資料。當以fork()系統呼叫建立乙個新的程序後,核心程序就會在程序表中給這個新程序分配乙個進入點,然後將相關資訊儲存在該進入點所對應的程序表內。這些資訊中有一項是其父程序的識別碼。當這個程序走完了自己的生命週期後,它會執行exit()系統呼叫,此時原來程序表中的資料會被該程序的退出碼(exit code)、執行時所用的cpu時間等資料所取代,這些資料會一直保留到系統將它傳遞給它的父程序為止。由此可見,defunct程序的出現時間是在子程序終止後,但是父程序尚未讀取這些資料之前。
defunct程序是不能直接kill -9殺掉的,否則就不叫殭屍程序了。
知道了defunct程序產生的原因,就可以輕易的kill掉defunct程序。
方法有二:
1,找到該defunct殭屍程序的父程序,將該程序的父程序殺掉,則此defunct程序將自動消失。
如何找到
defunct
殭屍程序的父程序?很簡單,一句命令就夠了:
ps -ef | grep defunct_process_pid。
2,重啟伺服器電腦,這個是最簡單,最易用的方法,但是如果你伺服器電腦上執行有其他的程式,那麼這個方法,代價很大。
所以推薦採用第1種方法。
Defunct程序 殭屍程序
下面談談 defunct 程序,中文翻譯叫殭屍程序。下文整理於網路以及apue一書。一 什麼是殭屍程序 在unix 系統中,乙個程序結束了,但是他的父程序沒有等待 呼叫wait waitpid 他,那麼他將變成乙個殭屍程序。當用ps命令觀察程序的執行狀態時,看到這些程序的狀態列為defunct。殭屍...
Defunct 程序 殭屍程序
下面談談 defunct 程序,中文翻譯叫殭屍程序。下文整理於網路以及apue一書。一 什麼是殭屍程序 在unix 系統中,乙個程序結束了,但是他的父程序沒有等待 呼叫wait waitpid 他,那麼他將變成乙個殭屍程序。當用ps命令觀察程序的執行狀態時,看到這些程序的狀態列為defunct。殭屍...
Defunct程序 殭屍程序
下面談談 defunct 程序,中文翻譯叫殭屍程序。下文整理於網路以及apue一書。一 什麼是殭屍程序 在unix 系統中,乙個程序結束了,但是他的父程序沒有等待 呼叫wait waitpid 他,那麼他將變成乙個殭屍程序。當用ps命令觀察程序的執行狀態時,看到這些程序的狀態列為defunct。殭屍...