編譯自: https://opensource.com/article/18/5/how-kill-process-stop-program-linux
譯者: ChenYi
在 Linux 中有幾種使用命令行或圖形界面終止一個程序的方式。
進程出錯的時候,您可能會想要中止或是殺掉這個進程。在本文中,我們將探索在命令行和圖形界面中終止進程或是應用程序,這裡我們使用 gedit 作為樣例程序。
使用命令行或字符終端界面
Ctrl + C
在命令行中調用 gedit (如果您沒有使用 gedit & 命令)程序的一個問題是 shell 會話被阻塞,沒法釋放命令行提示符。在這種情況下,Ctrl + C (Ctrl 和 C 的組合鍵) 會很管用。這會終止 gedit ,並且所有的工作都將丟失(除非文件已經被保存)。Ctrl + C 會給 gedit 發送了 SIGINT 信號。這是一個默認終止進程的停止信號,它將指示 shell 停止 gedit 的運行,並返回到主函數的循環中,您將返回到提示符。
$ gedit
^C
Ctrl + Z
它被稱為掛起字符。它會發送 SIGTSTP 信號給進程。它也是一個停止信號,但是默認行為不是殺死進程,而是掛起進程。
下面的命令將會停止(殺死/中斷) gedit 的運行,並返回到 shell 提示符。
$ gedit
^Z
[1]+ Stopped gedit
$
一旦進程被掛起(以 gedit 為例),將不能在 gedit 中寫入或做任何事情。而在後臺,該進程變成了一個作業,可以使用 jsbs 命令驗證。
$ jobs
[1]+ Stopped gedit
jobs 允許您在單個 shell 會話中控制多個進程。您可以終止,恢復作業,或是根據需要將作業移動到前臺或是後臺。
讓我們在後臺恢復 gedit,釋放提示符以運行其它命令。您可以通過 bg 命令來做到,後跟作業 ID(注意上面的 jobs 命令顯示出來的 [1],這就是作業 ID)。
$ bg 1
[1]+ gedit &
這和直接使用 gedit & 啟動程序效果差不多:
$ gedit &
使用 kill
kill 命令提供信號的精確控制,允許您通過指定信號名或是信號數字為進程發送信號,後跟進程 ID 或是 PID。
我喜歡 kill 命令的一點是它也能夠根據作業 ID 控制進程。讓我們使用 gedit & 命令在後臺開啟 gedit 服務。假設通過 jobs 命令我得到了一個 gedit 的作業 ID,讓我們為 gedit 發送 SIGINT 信號:
$ kill -s SIGINT %1
作業 ID 需要使用 % 前綴,不然 kill 會將其視作 PID。
不明確指定信號,kill 仍然可以工作。此時,默認會發送能中斷進程的 SIGTERM 信號。執行 kill -l 可以查看信號名列表,使用 man kill 命令閱讀手冊。
使用 killall
如果您不想使用特定的工作 ID 或者 PID,killall 允許您使用特定的進程名。中斷 gedit 最簡單的 killall 使用方式是:
$ killall gedit
它將終止所有名為 gedit 的進程。和 kill 相似,默認發送的信號是 SIGTERM。使用 -I 選項忽略進程名的大小寫。
$ gedit &
[1] 14852
$ killall -I GEDIT
[1]+ Terminated gedit
查看手冊學習更多 killall 命令選項(如 -u)。
使用 xkill
您是否遇見過播放器崩潰,比如 VLC 灰屏或掛起?現在你可以像上面一樣獲得進程的 PID 來殺掉它,或者使用 xkill 命令終止應用程序。
Using xkill
xkill 允許您使用鼠標關閉窗口。僅需在終端執行 xkill 命令,它將會改變鼠標光標為一個 X 或是一個小骷髏圖標。在你想關閉的進程窗口上點擊 x。小心使用 xkill,如手冊描述的一致,它很危險。我已經提醒過您了!
參閱手冊,瞭解上述命令更多信息。您還可以接續探索 pkill 和 pgrep 命令。
via: https://opensource.com/article/18/5/how-kill-process-stop-program-linux
閱讀更多 Linux中國 的文章