如何在 Linux 系統中結束程式或是中止程式

Sachin Patil 發表於 2022-11-28
Linux

在 Linux 中有幾種使用命令列或圖形介面終止一個程式的方式。

如何在 Linux 系統中結束程式或是中止程式

程式出錯的時候,您可能會想要中止或是殺掉這個程式。在本文中,我們將探索在命令列和圖形介面中終止程式或是應用程式,這裡我們使用 gedit 作為樣例程式。

使用命令列或字元終端介面

Ctrl + C

在命令列中呼叫 gedit (如果您沒有使用 gedit & 命令)程式的一個問題是 shell 會話被阻塞,沒法釋放命令列提示符。在這種情況下,Ctrl + CCtrlC 的組合鍵) 會很管用。這會終止 gedit ,並且所有的工作都將丟失(除非檔案已經被儲存)。Ctrl + C 會給 gedit 傳送了 SIGINT 訊號。這是一個預設終止程式的停止訊號,它將指示 shell 停止 gedit 的執行,並返回到主函式的迴圈中,您將返回到提示符。

$ gedit
^C

Ctrl + Z

它被稱為掛起字元。它會傳送 SIGTSTP 訊號給程式。它也是一個停止訊號,但是預設行為不是殺死程式,而是掛起程式。

下面的命令將會停止(殺死/中斷) gedit 的執行,並返回到 shell 提示符。

$ gedit
^Z
[1]+  Stopped                 gedit
$

一旦程式被掛起(以 gedit 為例),將不能在 gedit 中寫入或做任何事情。而在後臺,該程式變成了一個作業,可以使用 jobs 命令驗證。

$ 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,如手冊描述的一致,它很危險。我已經提醒過您了!

參閱手冊,瞭解上述命令更多資訊。您還可以接續探索 pkillpgrep 命令。


via: https://opensource.com/article/18/5/how-kill-process-stop-program-linux

作者:Sachin Patil 選題:lujun9972 譯者:CYLeft 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出