您的位置:首頁>科技>正文

怎樣在 Linux 命令列下殺死一個進程

想像一下:你打開了一個程式(可能來自於你的桌面功能表或者命令列), 然後開始使用這個程式, 沒想到程式會鎖死、停止運行、或者意外死機。 你嘗試再次運行該程式, 但是它回饋說原來的進程沒有完全關閉。

你該怎麼辦?你要結束進程。 但該如何做?不管你信與不信, 最好的解決方法大都在命令列裡。 值得慶倖的是, Linux 有供使用者殺死錯誤的進程的每個必要的工具, 然而, 你在執行殺死進程的命令之前, 你首先需要知道進程是什麼。 該如何處理這一類的任務。 一旦你能夠掌握這種工具, 它實際是十分簡單的……

讓我來介紹給你這些工具。

我來概述的步驟是每個 Linux 發行版本都能用的, 不論是桌上出版還是伺服器版。 我將限定只使用命令列, 請打開你的終端開始輸入命令吧。

定位進程

殺死一個沒有回應的進程的第一個步驟是定位這個進程。 我用來定位進程的命令有兩個:top 和 ps 命令。 top 是每個系統管理員都知道的工具, 用 top 命令, 你能夠知道到所有當前正在運行的進程有哪些。 在命令列裡, 輸入 top 命令能夠就看到你正在運行的程式進程(圖1)

圖 1: top 命令給出你許多的資訊。

從顯示的清單中你能夠看到相當重要的資訊, 舉個例子, Chrome 流覽器反映遲鈍, 依據我們的 top 命令顯示, 我們能夠辨別的有四個 Chrome 流覽器的進程在運行, 進程的 pid 號分別是 3827、3919、10764 和 11679。 這個資訊是重要的, 可以用一個特殊的方法來結束進程。

儘管 top 命令很是方便, 但也不是得到你所要資訊最有效的方法。 你知道你要殺死的 Chrome 進程是那個, 並且你也不想看 top 命令所顯示的即時資訊。 鑒於此, 你能夠使用 ps 命令然後用 grep 命令來過濾出輸出結果。

這個 ps 命令能夠顯示出當前進程清單的快照, 然後用 grep 命令輸出匹配的樣式。 我們通過 grep命令過濾 ps 命令的輸出的理由很簡單:如果你只輸入 ps 命令, 你將會得到當前所有進程的清單快照, 而我們需要的是列出 Chrome 流覽器進程相關的。 所以這個命令是這個樣子:

ps aux | grep chrome

這裡 aux 選項如下所示:

a = 顯示所有使用者的進程

u = 顯示進程的使用者和擁有者

x = 也顯示不依附於終端的進程

當你搜索圖形化程式的資訊時, 這個 x 參數是很重要的。

當你輸入以上命令的時候, 你將會得到比圖 2 更多的資訊, 而且它有時用起來比 top 命令更有效。

圖 2:用 ps 命令來定位所需的內容資訊。

結束進程

現在我們開始結束進程的任務。 我們有兩種可以幫我們殺死錯誤的進程的資訊。

進程的名字

進程的 ID (PID)

你用哪一個將會決定終端命令如何使用, 通常有兩個命令來結束進程:

kill - 通過進程 ID 來結束進程

killall - 通過進程名字來結束進程

有兩個不同的信號能夠發送給這兩個結束進程的命令。 你發送的信號決定著你想要從結束進程命令中得到的結果。

舉個例子, 你可以發送 HUP(掛起)信號給結束進程的命令, 命令實際上將會重啟這個進程。 當你需要立即重啟一個進程(比如就守護進程來說), 這是一個明智的選擇。 你通過輸入 kill -l 可以得到所有信號的清單, 你將會發現大量的信號。

圖 3: 可用的結束進程信號。

最經常使用的結束進程的信號是:

Signal NameSingle ValueEffectSIGHUP1掛起SIGINT2鍵盤的中斷信號SIGKILL9發出殺死信號SIGTERM15發出終止信號SIGSTOP17, 19, 23停止進程

好的是,你能用信號值來代替信號名字。所以你沒有必要來記住所有各種各樣的信號名字。

所以,讓我們現在用 kill 命令來殺死 Chrome 流覽器的進程。這個命令的結構是:

kill SIGNAL PID

這裡 SIGNAL 是要發送的信號,PID 是被殺死的進程的 ID。我們已經知道,來自我們的 ps 命令顯示我們想要結束的進程 ID 號是 3827、3919、10764 和 11679。所以要發送結束進程信號,我們輸入以下命令:

kill -9 3827kill -9 3919kill -9 10764kill -9 11679

一旦我們輸入了以上命令,Chrome 流覽器的所有進程將會成功被殺死。

我們有更簡單的方法!如果我們已經知道我們想要殺死的那個進程的名字,我們能夠利用 killall 命令發送同樣的信號,像這樣:

killall -9 chrome

附帶說明的是,上邊這個命令可能不能捕捉到所有正在運行的 Chrome 進程。如果,運行了上邊這個命令之後,你輸入 ps aux | grep chrome 命令過濾一下,看到剩下正在運行的 Chrome 進程有那些,最好的辦法還是回到 kIll 命令通過進程 ID 來發送信號值 9 來結束這個進程。

結束進程很容易

正如你看到的,殺死錯誤的進程並沒有你原本想的那樣有挑戰性。當我讓一個頑固的進程結束的時候,我趨向於用 killall命令來作為有效的方法來終止,然而,當我讓一個真正的活躍的進程結束的時候,kill命令是一個好的方法。

作者:JACK WALLEN 譯者:hwlog 校對:wxy

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

圖 3: 可用的結束進程信號。

最經常使用的結束進程的信號是:

Signal NameSingle ValueEffectSIGHUP1掛起SIGINT2鍵盤的中斷信號SIGKILL9發出殺死信號SIGTERM15發出終止信號SIGSTOP17, 19, 23停止進程

好的是,你能用信號值來代替信號名字。所以你沒有必要來記住所有各種各樣的信號名字。

所以,讓我們現在用 kill 命令來殺死 Chrome 流覽器的進程。這個命令的結構是:

kill SIGNAL PID

這裡 SIGNAL 是要發送的信號,PID 是被殺死的進程的 ID。我們已經知道,來自我們的 ps 命令顯示我們想要結束的進程 ID 號是 3827、3919、10764 和 11679。所以要發送結束進程信號,我們輸入以下命令:

kill -9 3827kill -9 3919kill -9 10764kill -9 11679

一旦我們輸入了以上命令,Chrome 流覽器的所有進程將會成功被殺死。

我們有更簡單的方法!如果我們已經知道我們想要殺死的那個進程的名字,我們能夠利用 killall 命令發送同樣的信號,像這樣:

killall -9 chrome

附帶說明的是,上邊這個命令可能不能捕捉到所有正在運行的 Chrome 進程。如果,運行了上邊這個命令之後,你輸入 ps aux | grep chrome 命令過濾一下,看到剩下正在運行的 Chrome 進程有那些,最好的辦法還是回到 kIll 命令通過進程 ID 來發送信號值 9 來結束這個進程。

結束進程很容易

正如你看到的,殺死錯誤的進程並沒有你原本想的那樣有挑戰性。當我讓一個頑固的進程結束的時候,我趨向於用 killall命令來作為有效的方法來終止,然而,當我讓一個真正的活躍的進程結束的時候,kill命令是一個好的方法。

作者:JACK WALLEN 譯者:hwlog 校對:wxy

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

Next Article
喜欢就按个赞吧!!!
点击关闭提示