Skip to content

[已解決] Linux kill -9 仍然無法殺死行程

Last Updated on 2022-08-08 by Clay

在 Linux 系統中,kill 指令是一個很常用的指令,因為很多時候當我們開發或是執行程式,我們都會碰上執行的程式突然卡住(stuck)的問題。這時候,我們就可以找出這個程式中自動被配發的 PID 碼,然後用 kill 指令殺死它。

然後我們會發現:咦!程式被終止了,我們的系統又順暢起來了!

但這一招並不是百分之百管用。我們來簡單看一下我們能發送的信號(signal)含義:

  • HUP 1 終端斷線
  • INT 2 中斷 (Ctrl + C)
  • QUIT 3 退出 (Ctrl + \)
  • TERM 15 終止
  • KILL 9 強制終止
  • CONT 18 繼續(與 STOP 相反)
  • STOP 19 暫停(Ctrl + Z)

而預設的 kill 其實就是預設信號 15 的一般終止。當我們使用一般終止無法停止行程(process)時,若是確認砍掉該行程不會影響(比方說這個卡住的程式根本就是你寫的、不砍掉才是影響系統),我們就會開始嘗試使用 kill -9 來執行『強制終止』。

kill -9 <PID>


但今天我在使用 kill -9 殺死行程時,我第一次遇到無法成功終止行程的狀況。真的是非常傻眼。

但那程式又不會自動停止。最後摸索了好一陣子,這才勉強找到一個解決辦法。


解決方法-殺死父行程

有一種可能性是,雖然我們要求該行程(process)停止卡住、釋放資源,但是其父行程仍在持續調用它,所以實際上我們並無法成功殺死該行程。(也是我遇到的狀況

那麼解決方法就簡單了。我們直接 kill 掉父行程。

再次強調,你真的需要確認不會影響你的系統才能去做。

首先,你先找到你想要的殺死的行程的 PID 碼,假設是 200330。

那麼,我們可以使用以下指令來查看其狀況:

cd /proc/200330
cat status | grep PPid


你所看到的 PPid,正是其父行程的 PID。那麼,接著只要殺死父行程即可。


References


Read More

Tags:

Leave a Reply