如何在 Linux 系統中結束程式或是中止程式
在 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
中寫入或做任何事情。而在後臺,該程式變成了一個作業,可以使用 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
命令終止應用程式。
xkill
允許您使用滑鼠關閉視窗。僅需在終端執行 xkill
命令,它將會改變滑鼠游標為一個 X 或是一個小骷髏圖示。在你想關閉的程式視窗上點選 x。小心使用 xkill
,如手冊描述的一致,它很危險。我已經提醒過您了!
參閱手冊,瞭解上述命令更多資訊。您還可以接續探索 pkill
和 pgrep
命令。
via: https://opensource.com/article/18/5/how-kill-process-stop-program-linux
作者:Sachin Patil 選題:lujun9972 譯者:CYLeft 校對:wxy
相關文章
- Windows系統如何批量結束工作管理員的程式樹?Windows
- 【Linux】關於Linux的系統程式設計總結Linux程式設計
- 如何在 Linux 系統中輸入 emojiLinux
- 如何在無響應的Linux系統中殺掉記憶體消耗最大的程式Linux記憶體
- 如何在64位Linux系統上用gcc編譯32位程式LinuxGC編譯
- Windows下檢視程式及結束程式命令Windows
- 在Linux中,如何在Linux中進行系統映象管理?Linux
- 教你如何在Linux 系統中輸入 emojiLinux
- Linux系統程式設計——特殊程式之孤兒程式Linux程式設計
- Linux系統程式設計之程式介紹Linux程式設計
- 如何在 Debian/Ubuntu 系統中檢查程式包是否安裝?Ubuntu
- 如何在Rust程式專案中安全地使用外部或是專案目錄下的檔案?Rust
- 【Linux】Linux系統程式設計入門Linux程式設計
- Linux系統管理之程式管理Linux
- 如何在 Linux 系統中配置 firewalld 防火牆策略Linux防火牆
- 3D列印結束時候,讓列印頭抬起的程式碼(cura的結束程式碼)3D
- Linux系統程式設計【4】——檔案系統Linux程式設計
- Windows下中止佔用埠的程式Windows
- 【Linux系統程式設計】Linux訊號列表Linux程式設計
- 【Linux系統程式設計】libevent庫event_base結構體Linux程式設計結構體
- 如何在Linux中檢視所有正在執行的程式Linux
- Linux系統程式設計—有名管道Linux程式設計
- Linux系統程式設計基礎Linux程式設計
- Linux系統殭屍程式詳解Linux
- Linux系統程式設計入門Linux程式設計
- 作業系統 Linux下的程式作業系統Linux
- 在Linux中,如何理解系統管理工具,如Webmin和Ajenti。LinuxWeb
- 直播系統程式碼,linux date修改系統時間Linux
- 程式碼如人
- 《Linux系統程式設計訓練營》9_Linux 程式層次分析Linux程式設計
- 《Linux系統程式設計訓練營》8_Linux 終端與程式Linux程式設計
- win10 結束不了程式 結束程式在 12244 上沒有成功:拒絕訪問怎麼解決Win10
- [SHELL] shell 實現多程式後,如何等待所有程式結束
- 【linux】系統程式設計-1-程式、管道和訊號Linux程式設計
- Linux系統程式設計:mmap使用技巧Linux程式設計
- Linux作業系統——簡單程式同步Linux作業系統
- Linux系統程式設計:訊號捕捉Linux程式設計
- linux c 獲取系統程式總數Linux