博客 > 如何查找和殺掉Linux中的僵尸進(jìn)程?
瀏覽量:1474次評論:0次
作者:銳成網(wǎng)絡(luò)整理時間:2024-07-19 15:52:43
Linux系統(tǒng)中,進(jìn)程就是一個程序的運行實例。它可能運行在前端(比如有交互的進(jìn)程),也可能運行在后端(比如無交互或自動運行的進(jìn)程)。它可能是一個父進(jìn)程(運行期間創(chuàng)建了其他進(jìn)程),也可能是一個子進(jìn)程(由其他進(jìn)程所創(chuàng)建)。在 Linux 系統(tǒng)中,除 PID 為 0 的第一個 init 進(jìn)程(或 systemd)外,其余進(jìn)程都有父進(jìn)程。進(jìn)程也可以擁有自己的子進(jìn)程。你可以通過使用命令pstree來查看進(jìn)程的樹型結(jié)構(gòu),你可以清晰的看到各個進(jìn)程的“家族樹”。
什么是僵尸進(jìn)程?
在Linux系統(tǒng)中,正常情況下,子進(jìn)程死亡后其父進(jìn)程會接收到通知進(jìn)行一些例如釋放內(nèi)存之類的清理操作。但是,如果父進(jìn)程未收到通知察覺子進(jìn)程死亡,那么子進(jìn)程就進(jìn)入了“僵死”狀態(tài)。這就是僵死進(jìn)程產(chǎn)生的原因。
碰到僵尸進(jìn)程怎么辦?
僵尸進(jìn)程并不可怕,少量的僵尸進(jìn)程對系統(tǒng)影響并不大。但如果系統(tǒng)的內(nèi)存已經(jīng)所剩不多或者有太多的僵尸進(jìn)程耗掉內(nèi)存,問題會變得糟糕。同樣,大部分 Linux 系統(tǒng)進(jìn)程最大 PID 設(shè)置為 32768,如果過多僵尸進(jìn)程導(dǎo)致其他重要任務(wù)沒有 PID 可用,那么你的系統(tǒng)會發(fā)生崩潰。特別當(dāng)存在一個編碼糟糕的程序開始大量產(chǎn)生僵尸進(jìn)程的時候,這種情況經(jīng)常發(fā)生。在這種情況下,我們就需要找到并殺死僵尸進(jìn)程。
如何查找僵尸進(jìn)程?
在linux系統(tǒng)中,進(jìn)程有如下幾種狀態(tài),它們隨時可能處于以上狀態(tài)中的一種:
我們可以在命令終端中通過top命令來查看系統(tǒng)進(jìn)程和它的當(dāng)前狀態(tài)。
命令如下:
top
如上面截圖中看到的,其中共有 250 個任務(wù)(進(jìn)程),其中 1 個處在 “運行中running” 狀態(tài),248 個進(jìn)程處于 “休眠sleep” 狀態(tài),還有一個處于 “僵尸zombie” 狀態(tài)。
現(xiàn)在問題進(jìn)入下一步,如何殺死 “僵尸” 進(jìn)程?
殺死僵尸進(jìn)程
僵尸進(jìn)程對系統(tǒng)來說就是已經(jīng)死亡的進(jìn)程,那么如何殺掉一個已經(jīng)死亡的進(jìn)程呢?
方法很簡單,我們只需要通過如下ps命令就可以列舉僵尸進(jìn)程,得到它們的進(jìn)程 ID。
ps ux | awk '{if($8=="Z+") print}'
ps ux 命令輸出的第 8 列顯示了進(jìn)程狀態(tài)。上述命令將會打印所有處在 Z+ 狀態(tài)(表示僵尸狀態(tài))的進(jìn)程。
確認(rèn)了進(jìn)程 ID 后,我們可以得到它的父進(jìn)程 ID:
ps -o ppid= -p <child_id>
你也可以將上述兩個命令結(jié)合在一起,直接得到僵尸進(jìn)程的 PID 及其父進(jìn)程的 PID:
ps -A -ostat,pid,ppid | grep -e '[zZ]'
通過以上命令都可以找到僵尸進(jìn)程,然后你就可以通過kill命令殺掉了。
kill -9 父進(jìn)程號
或者通過如下命令查看僵尸進(jìn)程:
ps -ef | grep defunct
該命令輸出結(jié)果上你可以直接看出其父進(jìn)程ID,這時候你直接使用kill命令殺掉即可。再次運行 ps 命令或 top 命令,你可以驗證僵尸進(jìn)程是否已經(jīng)被殺死。
寫在最后
通過本文你將認(rèn)識Linux系統(tǒng)中的僵尸進(jìn)程以及明白了其產(chǎn)生的主要原因。同時,你也能學(xué)會如何查找僵尸僵尸進(jìn)程并殺掉僵尸進(jìn)程。當(dāng)然你也可以自己別寫腳本設(shè)置成定時運行任務(wù)自動來替你做這些工作。
重要聲明:本文來自Linux265,經(jīng)授權(quán)轉(zhuǎn)載,版權(quán)歸原作者所有,不代表銳成觀點,轉(zhuǎn)載的目的在于傳遞更多知識和信息。
相關(guān)文章推薦
2025-05-27 11:53:22
2024-08-20 17:58:16
2024-08-19 17:49:29
2024-08-19 10:23:28
2024-08-16 17:06:33
熱門工具
標(biāo)簽選擇
閱讀排行
我的評論
還未登錄?點擊登錄