
如何殺死Linux中的僵尸進(jìn)程
聲明:該文章來自(LinuxStory)版權(quán)由原作者所有,K2OS渲染引擎提供網(wǎng)頁加速服務(wù)。
據(jù)傳說,魂去身存還能活動的肉體名叫僵尸,常常出沒于深山老林之中。然而在現(xiàn)代,伴隨著 C 語言和 Unix 系統(tǒng)的誕生,賽博僵尸開始活躍于每一臺電腦中?;蛘哒f,在使用電腦的過程中,有那么一些進(jìn)程由于種種原因,變成了雖然已經(jīng)被自我殺死但還仍然占用著資源的僵尸進(jìn)程。與此相對的還有已經(jīng)失去父進(jìn)程、無法被正常調(diào)用本應(yīng)該死亡但還在運行的孤兒進(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)程,雖然不在運行,但還是空占著資源。所以你普通地用 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/
- 1 從總書記的話語中感悟深沉的家國情 7904462
- 2 北方將現(xiàn)氣溫大逆轉(zhuǎn) 7807947
- 3 敘利亞前總統(tǒng)阿薩德被投毒 7713576
- 4 中國完成首次極區(qū)載人深潛調(diào)查任務(wù) 7617304
- 5 肯德基保密54年的炸雞配方將公開 7521398
- 6 普京:向“中國兄弟姐妹”致意 7423721
- 7 國慶出行 網(wǎng)警送你一份網(wǎng)絡(luò)安全指南 7334192
- 8 知名車評人陳震發(fā)生交通事故 7231817
- 9 黃蓉來開公交了 7137601
- 10 越來越多人喜歡上“搭子”社交 7040122