在 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 桌面環境,
假設我們想要強迫桌面上的 xclock
這個視窗程式停止執行,就直接在終端機中執行:
xkill
執行 xkill
之後,滑鼠游標就會變成一個叉的形狀,這時候就用滑鼠去點擊要中止執行的視窗。
被點擊到的視窗程式就會立刻被中止執行,使用方式就是這麼簡單。
製作 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
啟動圖示了,直接把這個 xkill
的圖示用滑鼠拖到左側的工具選單中。
這樣就完成了,之後若是要砍掉桌面上的視窗程式,就點一下這個 xkill
的啟動圖示,再點擊要中止的視窗就可以了。
以下是一些可以用來作為 xkill
的啟動圖示的圖片,大家有需要可以下載回去使用。
參考資料:iheartubuntu、鳥哥的 Linux 私房菜、askubuntu