
如何殺死Linux中的僵尸進(jìn)程
據(jù)傳說,魂去身存還能活動的肉體名叫僵尸,常常出沒于深山老林之中。然而在現(xiàn)代,伴隨著 C 語言和 Unix 系統(tǒng)的誕生,賽博僵尸開始活躍于每一臺電腦中?;蛘哒f,在使用電腦的過程中,有那么一些進(jìn)程由于種種原因,變成了雖然已經(jīng)被自我殺死但還仍然占用著資源的僵尸進(jìn)程。與此相對的還有已經(jīng)失去父進(jìn)程、無法被正常調(diào)用本應(yīng)該死亡但還在運(yùn)行的孤兒進(jìn)程。關(guān)閉孤兒進(jìn)程是比較簡單的一件事,但檢索和?kill?僵尸進(jìn)程要困難許多。
如何理解進(jìn)程
程序們被執(zhí)行的時候,它們會叫出一系列進(jìn)程作為小弟,去具體跑腿來實現(xiàn)功能。比如我們可以用 ps 命令來查看當(dāng)前的所有進(jìn)程。
當(dāng)然,不僅是程序會創(chuàng)建新進(jìn)程,進(jìn)程也可以創(chuàng)建新進(jìn)程,這種情況下就會產(chǎn)生類似樹形的結(jié)構(gòu),我們可以用 pstree 來查看進(jìn)程樹的情況。
更大的進(jìn)程樹會像這樣:
可以看到每個進(jìn)程都在系統(tǒng)中有一個編號,即 pid。pid 1的進(jìn)程就是系統(tǒng)引導(dǎo)中執(zhí)行的第一個進(jìn)程,也就是 init 進(jìn)程。在新版本的?Linux?中通常叫做 systemd。
使用?kill?來殺死進(jìn)程
kill?命令是?Linux?系統(tǒng)中的一把最鋒利的劍,你可以用它來終止?Linux?系統(tǒng)中所有指定的進(jìn)程。而只刪除一個進(jìn)程會比較危險,要小心它的家人依舊存活在你的系統(tǒng)中,通過占用資源來報復(fù)你。可以嘗試 killall 指令,它會幫助你下“誅九族”的命令。
如果單獨殺掉父進(jìn)程而子進(jìn)程沒能自動結(jié)束,子進(jìn)程就變成了孤兒進(jìn)程,但只要通過 ps 命令搜索到它的 pid,依舊可以簡單的結(jié)束掉它們。
如何殺死僵尸進(jìn)程
那么僵尸進(jìn)程又有什么特殊的呢?因為它們已經(jīng)死過一次了,所以不能再殺掉了。
如果一個子進(jìn)程自然終止,它們都會變成臨時的僵尸進(jìn)程,直到父進(jìn)程通過代碼釋放掉它們本來所占用的資源。但如果父進(jìn)程這一步失敗或被忽略了,這個子進(jìn)程就變成了真正的僵尸進(jìn)程,雖然不在運(yùn)行,但還是空占著資源。所以你普通地用 kill 命令來結(jié)束掉它們的時候,一般情況下是不起作用的。
那么要怎么殺掉它們呢?答案是結(jié)束掉它們的父進(jìn)程。首先用 ps 指令來找到需要殺死的僵尸進(jìn)程,然后用 pstree 指令尋找它們的父進(jìn)程,結(jié)束掉父進(jìn)程,就可以實現(xiàn)目標(biāo)了。假設(shè) pid 827 是我們要結(jié)束的僵尸進(jìn)程,而 pid 749是它的父進(jìn)程,我們可以
$ sudo kill -9 749
來結(jié)束掉它們的生命。
結(jié)束掉父進(jìn)程是一個很方便的做法,但要注意最極端的情況:父進(jìn)程的 pid 是 1。這種時候殺掉父進(jìn)程,它會自動重啟,變成不死的僵尸?
參考資料:
How to kill a zombie process on Linux
[超站]友情鏈接:
四季很好,只要有你,文娛排行榜:https://www.yaopaiming.com/
關(guān)注數(shù)據(jù)與安全,洞悉企業(yè)級服務(wù)市場:https://www.ijiandao.com/

隨時掌握互聯(lián)網(wǎng)精彩
- 1 這一天致青年 我們?nèi)绾钨s續(xù)與傳承 7903995
- 2 “第一天出去旅游的人已老實” 7809182
- 3 男子送老人過馬路 3次敬禮全網(wǎng)刷屏 7713223
- 4 中國假期吸引世界流量 7616680
- 5 張嘉益《人民日報》撰文 7522029
- 6 90后美女副教授走紅 北航回應(yīng) 7428859
- 7 網(wǎng)警提醒:國慶歡樂游 安全別松懈 7330524
- 8 走失小狗在服務(wù)區(qū)苦等主人8小時 7233792
- 9 “課本上的傳奇”珍·古道爾逝世 7143036
- 10 多省發(fā)文補(bǔ)貼社保個人繳費額的25% 7043109