如何在Linux系統(tǒng)中結(jié)束進(jìn)程或是中止程序
在 Linux 中有幾種使用命令行或圖形界面終止一個(gè)程序的方式。
進(jìn)程出錯(cuò)的時(shí)候,您可能會(huì)想要中止或是殺掉這個(gè)進(jìn)程。在本文中,我們將探索在命令行和圖形界面中終止進(jìn)程或是應(yīng)用程序,這里我們使用 gedit 作為樣例程序。
使用命令行或字符終端界面
Ctrl + C
在命令行中調(diào)用 gedit
(如果您沒(méi)有使用 gedit &
命令)程序的一個(gè)問(wèn)題是 shell 會(huì)話(huà)被阻塞,沒(méi)法釋放命令行提示符。在這種情況下,Ctrl + C
(Ctrl
和 C
的組合鍵) 會(huì)很管用。這會(huì)終止 gedit
,并且所有的工作都將丟失(除非文件已經(jīng)被保存)。Ctrl + C
會(huì)給 gedit
發(fā)送了 SIGINT
信號(hào)。這是一個(gè)默認(rèn)終止進(jìn)程的停止信號(hào),它將指示 shell 停止 gedit
的運(yùn)行,并返回到主函數(shù)的循環(huán)中,您將返回到提示符。
$ gedit
^C
Ctrl + Z
它被稱(chēng)為掛起字符。它會(huì)發(fā)送 SIGTSTP
信號(hào)給進(jìn)程。它也是一個(gè)停止信號(hào),但是默認(rèn)行為不是殺死進(jìn)程,而是掛起進(jìn)程。
下面的命令將會(huì)停止(殺死/中斷) gedit
的運(yùn)行,并返回到 shell 提示符。
$ gedit
^Z
[1]+ Stopped gedit
$
一旦進(jìn)程被掛起(以 gedit
為例),將不能在 gedit
中寫(xiě)入或做任何事情。而在后臺(tái),該進(jìn)程變成了一個(gè)作業(yè),可以使用 jsbs
命令驗(yàn)證。
$ jobs
[1]+ Stopped gedit
jobs
允許您在單個(gè) shell 會(huì)話(huà)中控制多個(gè)進(jìn)程。您可以終止,恢復(fù)作業(yè),或是根據(jù)需要將作業(yè)移動(dòng)到前臺(tái)或是后臺(tái)。
讓我們?cè)诤笈_(tái)恢復(fù) gedit
,釋放提示符以運(yùn)行其它命令。您可以通過(guò) bg
命令來(lái)做到,后跟作業(yè) ID(注意上面的 jobs
命令顯示出來(lái)的 [1]
,這就是作業(yè) ID)。
$ bg 1
[1]+ gedit &
這和直接使用 gedit &
啟動(dòng)程序效果差不多:
$ gedit &
使用 kill
kill
命令提供信號(hào)的精確控制,允許您通過(guò)指定信號(hào)名或是信號(hào)數(shù)字為進(jìn)程發(fā)送信號(hào),后跟進(jìn)程 ID 或是 PID。
我喜歡 kill
命令的一點(diǎn)是它也能夠根據(jù)作業(yè) ID 控制進(jìn)程。讓我們使用 gedit &
命令在后臺(tái)開(kāi)啟 gedit
服務(wù)。假設(shè)通過(guò) jobs
命令我得到了一個(gè) gedit
的作業(yè) ID,讓我們?yōu)?gedit
發(fā)送 SIGINT
信號(hào):
$ kill -s SIGINT %1
作業(yè) ID 需要使用 %
前綴,不然 kill
會(huì)將其視作 PID。
不明確指定信號(hào),kill
仍然可以工作。此時(shí),默認(rèn)會(huì)發(fā)送能中斷進(jìn)程的 SIGTERM
信號(hào)。執(zhí)行 kill -l
可以查看信號(hào)名列表,使用 man kill
命令閱讀手冊(cè)。
使用 killall
如果您不想使用特定的工作 ID 或者 PID,killall
允許您使用特定的進(jìn)程名。中斷 gedit
最簡(jiǎn)單的 killall
使用方式是:
$ killall gedit
它將終止所有名為 gedit
的進(jìn)程。和 kill
相似,默認(rèn)發(fā)送的信號(hào)是 SIGTERM
。使用 -I
選項(xiàng)忽略進(jìn)程名的大小寫(xiě)。
$ gedit &
[1] 14852
$ killall -I GEDIT
[1]+ Terminated gedit
查看手冊(cè)學(xué)習(xí)更多 killall
命令選項(xiàng)(如 -u
)。
使用 xkill
您是否遇見(jiàn)過(guò)播放器崩潰,比如 VLC 灰屏或掛起?現(xiàn)在你可以像上面一樣獲得進(jìn)程的 PID 來(lái)殺掉它,或者使用 xkill
命令終止應(yīng)用程序。
Using xkill
xkill
允許您使用鼠標(biāo)關(guān)閉窗口。僅需在終端執(zhí)行 xkill
命令,它將會(huì)改變鼠標(biāo)光標(biāo)為一個(gè) X 或是一個(gè)小骷髏圖標(biāo)。在你想關(guān)閉的進(jìn)程窗口上點(diǎn)擊 x。小心使用 xkill
,如手冊(cè)描述的一致,它很危險(xiǎn)。我已經(jīng)提醒過(guò)您了!
參閱手冊(cè),了解上述命令更多信息。您還可以接續(xù)探索 pkill
和 pgrep
命令。