管理 Linux 中的進程對於新的系統管理員(sysadmin)來說可能一開始會顯得很困難。但通過一點解釋和演示,你將學會如何使用命令行工具,例如 ps
和 kill
,來查找和執行 Linux 終止進程只是使用命令行工具,像
這篇文章中,你將學習到定位正在運行和異常進程、終止正在運行進程、查找後台進程等命令,以及在任何 Linux 操作系統上的更多內容。
文章結束時,你將能夠像 Linux 專業人員一樣,根據進程識別號(PID)從命令行管理進程。繼續閱讀,了解 Linux 中的進程管理命令!
先決條件
本文將進行一個關於如何管理 Linux 中進程的實例。如果你想要親自動手,你將需要以下東西:
- A Linux host, which can be a virtual machine or a physical machine.
- 要嘗試 PowerShell 示例,請在 Linux 主機上安裝PowerShell 7.1.1。
- A non-root user account. While root access is not required, there will be an example where the root user can kill the running process of another user.
你選擇使用的 Linux 發行版取決於你。本文將基於 Ubuntu 20.04 LTS。然而,這些命令對於 Linux 操作系統是標準的。
準備好開始了嗎?很好,讓我們開始吧。
在 Linux 中管理進程
有時,你可能會遇到需要在Linux系統上停止運行中進程的情況。例如,你可能有一個定期運行的bash腳本。該bash腳本配置為通過cron(Linux進程調度器)作業以另一個用戶身份運行。
有時,該腳本會生成錯誤進程,這可能導致腳本失敗。如何在不重新啟動系統或停止腳本的情況下終止這些錯誤進程?
在接下來的章節中,你將學習如何在Linux系統上使用命令定位並終止或kill進程。每個章節都會建立在上一個章節的基礎上。你將學習到Linux原生的ps
、top
、pgrep
、kill
和pkill
命令。
作為獎勵,還包括PowerShell對應的命令Get-Process
和Stop-Process
,如果你不喜歡Linux原生命令的話。
定位進程的工具
在終止進程之前,你必須定位要終止的正確進程。唯一的PID可用於精確定位。繼續閱讀以了解如何定位正確的進程以進行終止。
使用ps
命令顯示進程信息
進程狀態或ps
命令顯示與Linux系統上運行進程相關的信息。您可以定位運行中的進程,甚至可以使用ps
查找後台進程。
默認情況下,ps
命令將顯示當前用戶的有效用戶標識(EUID)的所有進程。運行如下所示的ps
命令將返回您的用戶可以終止的每個正在運行的進程。

bkindle
.使用top
命令查找擴展的進程信息
如果您想要查找有關運行中進程和系統指標的不斷刷新的信息,那麼您可以使用top
命令。與ps
不同,top
命令會在屏幕上定期更新進程信息。
運行top
命令時,您將看到不僅有PID。進程詳細信息還包括CPU和內存百分比,Nice值(CPU調度進程優先級)以及由Linux內核設置的進程優先級(PR)。
對於新手或經驗豐富的系統管理員,top
命令通常是管理重要系統資源和進程的主要工具。如下所示,top
命令輸出顯示的進程信息比ps
命令更多,包括整體系統指標。

top
command on Ubuntu Desktop 20.04 LTS showing all running PID’s.htop
是 top
的增強版本,包含各種改進,例如彩色終端輸出。
假設您想檢查一個進程正在消耗的內存或 CPU 資源。在這種情況下,您可以像下面顯示的那樣使用 top
的 p
選項。

也許您需要顯示特定用戶名下的所有運行中進程。top
命令提供了 u
選項,僅顯示特定用戶的進程。如下例所示,僅顯示與用戶 ID bkindle
匹配的進程 ID。

top
command displaying only processes for the user bkindle
.使用 pgrep
命令查找特定進程 PID
最初是一個 Solaris 命令,pgrep
被移植到 Linux 用於使用。結合 grep
命令的搜索功能和 ps
的進程管理,pgrep
在找到要目標的確切進程方面提供了靈活性。
儘管 ps
顯示更多信息,但 pgrep
設計為僅返回返回的進程的 PID。 pgrep
有助於使用許多可用的搜索參數來定位進程。在下面的例子中,pgrep
顯示搜索與 vmtoolsd
匹配的任何進程。

pgrep
to obtain all PIDs associated with vmtoolsd
.同樣地,使用u
開關指定使用者ID,以檢索僅與該特定使用者相關的進程。如下所示,僅返回一個用戶bkindle
和vmtoolsd
進程的單個PID。

vmtoolsd
process associated with the user bkindle
.在Linux中使用PowerShell的Get-Process
查找進程
典型的Linux命令非常好用,但你知道PowerShell也能夠管理Linux進程嗎?Get-Process
cmdlet的操作方式類似於Linux的ps
命令,返回進程信息。例如,也許你需要查找當前用戶bkindle
運行的所有進程。如下所示,查找用戶bkindle
的所有PID(由Get-Process
標記為ID)。

Get-Process
cmdlet.相關: 如何使用PowerShell Where-Object篩選所有內容
學會了如何定位不同進程後,繼續閱讀以發現在Linux中終止或殺死進程的所有方法!
在Linux中使用Kill命令殺死進程
在前幾節中,你已經學會了使用本機Linux和PowerShell命令查找要發送終止信號的進程的PID。接下來的部分將解釋如何使用kill
和pkill
程序,以及其相關信號和命令行開關。
Linux信號和進程管理
訊號是 Linux 與運行在作業系統中的進程通信的方法。
-
kill
命令用於終止進程的三個主要信號是: - 1(SIGHUP)- 終止互動式程序並導致守護程序(背景服務)重新讀取進程使用的配置文件。
- 9(SIGKILL)- 強制進程退出而不執行優雅的關機任務。
15(SIGTERM)- 允許進程優雅地終止,例如在完成時關閉打開的文件。這是在使用 kill 命令時未指定數字時使用的默認信號。儘管本文僅關注用於終止進程的三個主要信號,但總共有 64 個可用信號。使用
kill -l
獲取信號及其相應數字的列表。
現在您了解了用於終止進程的三個主要信號,請在下一節中學習如何終止進程。
使用 kill
命令終止進程
在下一個示例中,您將使用 kill
命令。假設您正在運行一個名為 pwsh
的 PowerShell 實例,並且分配的 PID 是 22687。終止此進程的一種方法如下所示。
- 使用
pgrep pwsh
確定進程pwsh
的 PID,用於kill
命令。 - 使用
kill -s TERM 22687
來優雅地終止pwsh
進程。TERM
命令對應到15(SIGTERM)信號,並且使用kill
命令的s
參數來指示。 - 使用您選擇的
top
、ps
或pgrep
來驗證PID是否不再列出。
以下是從Ubuntu 20.04 LTS bash終端機中的示例。

kill
and associated commands to terminate the pwsh
process.使用
killall
命令將終止所有基於名稱而不是PID的進程,這可能會使該命令變得非常破壞性,如果不小心使用。然而,如果您選擇使用此命令,請使用i
選項使命令要求確認。
使用pkill
按名稱終止進程
您可能已經注意到kill
命令只能使用進程ID。這可能使終止進程變得複雜且需要多個步驟。包含在procps和procps-ng套件中的pkill
命令可以根據搜索的名稱終止進程。
功能上,pkill
命令充当了pgrep
程序的包装器。pkill
命令发送指定的信号给找到的每个进程,而不仅仅在终端中列出PID。pkill
与kill
不同之处在于pkill
只能使用进程的名称,而不能使用PID。
默认情况下,在Ubuntu 20.04 LTS中不提供
pkill
命令。您需要下载并安装该应用程序。要执行此操作,请运行sudo apt install mcollective-plugins-process -y
。
要使用pkill
终止进程,请执行以下步骤:
- 使用
ps
验证nano应用程序(命令行文本编辑器)当前是否正在运行。此步骤是可选的,但在终止进程之前进行的安全检查。 - 使用
pkill -9 nano
强制终止nano应用程序。
下面是在Ubuntu 20.04 LTS bash终端中执行上述过程的示例。

pkill
command to forcefully terminate the nano process.使用Top
命令终止进程
当您运行top
命令查看运行中的进程时,您可以使用k按键终止给定进程。您将看到一个交互式提示,要求输入要终止的进程的PID。
如下所示,运行top
命令并按k。输入要终止的PID,然后按Enter键立即终止PID。

top
to specify a process to terminate using the k keystroke.接下来,了解使用PowerShell Stop-Process
命令的另一种替代Linux命令的方法!
使用 PowerShell 的 Stop-Process
命令终止进程
如果你不喜欢 Linux 的原生命令,PowerShell 可以满足你的需求!就像使用 kill
命令一样,你可以使用 Stop-Process
cmdlet 在 Linux 中终止进程。再次假设你正在运行一个 PowerShell 的 pwsh
进程。
- 使用
Get-Process -ProcessName 'pwsh'
找到 PID,并记下要终止的 PID。 - 使用
Stop-Process -Id 29992,30014
来终止返回的多个进程。 - 使用
Get-Process -ProcessName 'pwsh'
验证 PIDs,29992
和30014
不再列出,表示它们已被终止。
你也可以使用
Get-Process
和kill
方法来终止一个或多个进程:(Get-Process -Id [PID]).Kill()
或(Get-Process -Id [PID1,2,3,4]).Kill()
。使用
ProcessName
参数时要小心。使用此参数类似于使用killall
命令,将会终止所有匹配所提供名称的进程。
下面是从 Ubuntu 20.04 LTS bash 终端执行上述进程的示例。

Stop-Process
to kill processes in Linux.下一步
你現在應該知道在Linux中尋找和終止進程的多種方法了!為了你的下一個挑戰,試著使用SSH連接遠程殺死進程,或者殺死可能在容器中運行的進程。