殭屍程序(Zombie process)

2021-05-27 07:08:17 字數 633 閱讀 2539

非常簡單,簡單記錄下,幾年前了解到的東西發現現在忘了,現在看來很簡單,可能當時沒有很好理解。

殭屍程序這個概念是在unix和類unix(unix-like)系統裡面的概念。簡單講就是子程序已經執行完畢,系統分配給它的所有資源都釋放了,除了一樣-pid和程序表的相應項。它在等父程序去讀程序表中的項去確認這個子程序的退出狀態(父程序通過waitpid()去讀取),這個殭屍狀態將會持續直到父程序call waitpid()去讀取了。所以,殭屍程序出現時,1)子程序已經結束了2)父程序肯定還在執行,但就是不去call waitpid(),,,所以程序表的項一直在那等啊等

以前把zombie process和orphan process搞混了,呵呵。orphan process是指父程序在子程序結束前先結束。這個子程序會被init(程序號1)接管,稱為init程序的子程序,當這個orphan程序結束時,init程序會call waitpid,所以orphan程序永遠成不了殭屍程序,我實驗了下,在orphan程序結束後,init會很迅速的call waitpid。

很多人嘗試用kill 去殺殭屍程序,都失敗,甚至一些工作經驗豐富的人也這樣試過。kill是不能殺死殭屍程序的,因為這個程序已經結束,不再相應訊號了。殺殭屍程序的乙個簡單方法是,先殺它的父程序,然後很快它就被init給clean掉了,有些暴力。

殭屍程序和如何刪除殭屍程序

當乙個子程序結束後,他的父程序沒有等待他 wait waitpid 清除他的所有資源時,它就變成乙個殭屍程序。在linux系統中,在每個程序退出的時候,核心釋放該程序所有的資源,包括開啟的檔案,占用的記憶體等。但是仍然為其保留一定的資訊 包括程序號the process id,退出狀態the ter...

檢視殭屍程序並殺掉殭屍程序

在運維過程中,我們經常會碰到機器由於某幾個特殊的殭屍程序造成整台伺服器上的程序異常卡死,負載變高。例如以下 其中,存在8個殭屍程序,並且程序19712的cpu使用異常。檢視具體的殭屍程序有哪些 發現這些子殭屍程序的父程序即為19712程序。其對應的其實就是namenode程序 解決辦法 1 如果業務...

Defunct程序 殭屍程序

下面談談 defunct 程序,中文翻譯叫殭屍程序。下文整理於網路以及apue一書。一 什麼是殭屍程序 在unix 系統中,乙個程序結束了,但是他的父程序沒有等待 呼叫wait waitpid 他,那麼他將變成乙個殭屍程序。當用ps命令觀察程序的執行狀態時,看到這些程序的狀態列為defunct。殭屍...