在 Windows 中如果有程式執行到一半當掉或沒有回應,可以使用 Ctrl + Alt + Delete 開啟工作管理員,砍掉當掉的程式,而在 Linux 中如果程式當掉,也有類似的方式可以直接砍掉指定行程(process)。

使用 kill 指令

在 Linux 若要中止程式的執行,最常見的方式就是使用 kill 指令,此指令可以將指定的行程(process)強迫中止,其使用方式如下:

kill PID

其中 PID 就是要中止的行程 ID(Process ID),這個 PID 可以從 ps 指令的輸出中得到。

而有時候程式當掉時,這樣的方式如果沒辦法停止程式的執行,可以試試看以不同的訊號(signal)試試看:

kill -9 PID

這樣會強迫程式馬上中止。kill 指令常用的訊號有幾個:

  • -2:這個訊號與鍵盤輸入 Ctrl + C 是同樣的動作,也是通知程式停止執行。
  • -9:立刻強制停止程式執行。
  • -15:以正常的程序通知程式停止執行,這是預設的訊號。
  • -l:列出所有可用的訊號。

以下是一些 kill 指令的使用範例:

將行程 ID 為 12932 的程式終止:

kill 12932

強制中止行程 ID 為 12932 的程式:

kill -9 12932

使用 killall 指令

大家應該會發現基本的 kill 指令有些缺點,每次要中止某個程式時,都要用 ps 指令先查詢該程式的行程 ID(Process ID),才能再用 kill 指令中止程式,有點麻煩,這種狀況就可以改用 killall 指令,這個指令個功能與 kill 指令幾乎相同,但是他是直接使用程式的名稱來指定要中止的程式,這樣只要知道程式名稱即可直接使用。

killall 指令常用的參數有:

  • -e, --exact:在程式名稱完全比對成功時,才中止程式。如果程式的名稱超過 15 個字元,其餘的字元在系統中會被捨去,這時候在預設的狀況下,killall 會把所有符合前 15 個字元的程式都中止掉,如果加上 -e 參數的話,killall 指令就會跳過這種名稱過長的程式。
  • -I, --ignore-case:在比對程式名稱時,英文大小寫視為相同(ignore case)。
  • -i, --interactive:在中止程式之前,先以互動式的方式詢問。
  • -l, --list:列出所有的訊號(signal)名稱。
  • -r, --regexp:使用常規表示法(regular expression)指定程式名稱。
  • -s, --signal:指定送出的訊號(signal)。
  • -u, --user:只中止指定使用者所執行的程式。
  • -o, --older-than:指定程式的開始執行時間點,必須在此時間點之前。
  • -y, --younger-than:指定程式的開始執行時間點,必須在此時間點之後。

以下是一些 kill 指令的使用範例:

中止執行 xclock 這個程式:

killall xclock

使用 pkill 指令

pkill 指令與 killall 指令類似,也是可以指定程式名稱,但是其所指定的名稱會直接以常規表示法(regular expression)的方式比對,只要比對成功,就會中止該程式。

對於不熟悉常規表示法的初學者而言,用此程式可能比較危險,如果使用不正確的常規表示法,可能會把不該中止的程式也砍了,所以使用上要注意。

另外有一個 pgrep 指令,此指令與 pkill 的語法幾乎相同,但此指令不會直接中止程式,而是把符合的行程 ID(Process ID)列出來,這個指令可以讓你在使用 pkill 指令前先做一次確認,或是與其他的指令搭配使用,例如將 firefox 的 nice 值調大:

renice +4 `pgrep firefox`

使用 xkill 指令

上面所提到的指令都是要以程式的行程 ID 或程式的名稱來指定要中止的程式,但是在 X Window 的桌面環境中,如果視窗程式當掉,要找到該程式的行程 ID 或程式名稱事件很麻煩的事情,尤其是在當機的時候。

xkill 就是為了中止視窗程式而設計的指令,可以讓你在不需要知道程式的行程 ID 與名稱的情況,直接把該程式砍掉,以下是使用教學範例:

這是 Ubuntu 的 Unity 桌面環境,

gnome1

Unity 桌面環境

假設我們想要強迫桌面上的 xclock 這個視窗程式停止執行,就直接在終端機中執行:
xkill
執行 xkill 之後,滑鼠游標就會變成一個叉的形狀,這時候就用滑鼠去點擊要中止執行的視窗。

gnome2

使用 xkill 砍掉 xclock

被點擊到的視窗程式就會立刻被中止執行,使用方式就是這麼簡單。

製作 xkill 啟動圖示

xkill 雖然已經很方便了,但是美中不足的一點就是還是需要自己開啓終端機輸入一行指令,這個部分我們可以自行製作一個啓動圖示,這樣就完全不需要使用任何指令了。

Ubuntu 的 Unity 桌面跟 Gnome 有些不同,若要新增啟動圖示,要自己編輯 .desktop 檔。

Step 1
首先在終端機執行:

gedit ~/.local/share/applications/xkill.desktop

這會開啟 gedit 編輯一個啟動圖示的 .desktop 檔。

Step 2
輸入以下內容:

[Desktop Entry]
Name=xkill
Comment=
Exec=/usr/bin/xkill
Icon=/home/seal/plunderin_pirates.png
Terminal=false
Type=Application
StartupNotify=true

其中,Name 是指定啟動圖示的名稱,而 Icon 則是指定啟動圖示所顯示的圖片。

輸入完成後,儲存此檔案,然後就可以關閉 gedit 了。

Step 3
在桌面的左上角有個 Ubuntu 選單,點下去後搜尋 xkill

xkill

在 Unity 選單搜尋 xkill 啟動圖示

這時候應該就可以找到剛剛新增的 xkill 啟動圖示了,直接把這個 xkill 的圖示用滑鼠拖到左側的工具選單中。

xkill2

這樣就完成了,之後若是要砍掉桌面上的視窗程式,就點一下這個 xkill 的啟動圖示,再點擊要中止的視窗就可以了。

以下是一些可以用來作為 xkill 的啟動圖示的圖片,大家有需要可以下載回去使用。

pirate-icon

flag-34269_640

pg_icon01_full

pirateIcon

plunderin_pirates

參考資料:iheartubuntu鳥哥的 Linux 私房菜askubuntu