消滅殭屍進程!
也稱為「defunct」或「dead」進程 - 簡單來說,殭屍進程是指已經結束,但仍存在於系統進程表中的進程。理想情況下,一旦進程完成其工作/執行,它應該從進程表中清除。但由於某些原因,其父進程在執行後沒有正確清理它。
在一個公正的(Linux)世界中,進程在完成其執行並退出後會通知其父進程。然後父進程將從進程表中刪除進程。如果父進程無法從其子進程(已完成的進程)讀取進程狀態,則它將無法將進程從內存中刪除,因此該進程仍將繼續存在於進程表中 - 因此被稱為Zombie(殭屍進程)!
為了殺死殭屍進程,我們首先需要識別它。以下命令可用於查找殭屍進程:
$ps aux | egrep "Z|defunct"
在輸出的STAT列中的Z和/或最後一個(COMMAND)列中的[defunct]將標識殭屍進程。
現實中你無法殺死一個殭屍進程,因為它已經死了!可以做的是顯式地通知其父進程,以便它可以重試讀取子(已死)進程的狀態並最終從進程表中清除它們。這可以通過向父進程發送SIGCHLD信號來完成。以下命令可用於查找父進程ID(PID):
$ ps -o ppid= <Child PID>
一旦您擁有了殭屍進程的父進程ID,您可以使用以下命令向父進程發送SIGCHLD信號:
$ kill -s SIGCHLD <Parent PID>
然而,如果這不能幫助清除殭屍進程,您將不得不殺死或重啟其父進程,或者在殭屍進程的數量激增並導致系統故障時,您將別無選擇,只能進行系統重啟。以下命令可用於殺死其父進程:
$ kill -9 <Parent PID>
請注意,殺死父進程將影響其所有子進程,因此快速雙重檢查將有助於確保安全。或者,如果存在幾個殭屍進程不會佔用太多CPU/內存,最好在下一次計劃的系統維護期間殺死父進程或重新啟動系統。
推薦文章
對這篇文章感覺如何?
太棒了
0
不錯
0
愛死了
1
不太好
0
感覺很糟
0
More in:開源學村
SoCal Linux博覽會回歸20周年
現在已經是支持和推廣FOSS社區的第20個年頭了,SCaLE 20x - 南加州Linux博覽會將於2023年3月9日至12日在帕薩迪納會議中心舉行。 這個為期4天的年度活動彙集了充滿活力的開源用戶社 […]
2022年,從學習Rust開始
Rust作為一個新語言,已經連續五年(2016,2017,2018,2019,2020)在Stack Overflow開發者調查的「最受喜愛編程語言」。Rust是一個值得學習的編程語言,它對安全的專註,會幫助你許多。學習Rust 從這本小小的Rust Cheat Sheet出發,了解Rust語言的基本操作。
使用 Linux 命令行解決Wordle 問題
你可以使用 Linux 的 grep 命令和 fgrep 命令來解決Wordle 問題(進行篩選排除),grep 命令使用正則表達式進行搜索,fgrep 命令也像 grep 一樣搜索文本,但不使用正則表達式,grep 和 fgrep 命令在掃描單詞列表時提供了極大的靈活性。
如何殺死 Linux 中的殭屍進程
在使用操作系統工作時,要時刻注意保持對系統中進程的掌控。一旦殭屍進程佔滿了你的資源,就只能依靠重新啟動來挽回一切了。所以快來學慣用 kill 指令來殺滅殭屍進程吧!