管理 Linux 中的进程对于新系统管理员(sysadmin)来说可能一开始看起来有些令人生畏。但通过一点解释和演示,您将学会如何查找和执行 Linux 终止进程,这只是使用命令行工具如 ps
和 kill
的问题。
在本文中,您将学到定位正在运行和错误进程、终止正在运行进程、查找后台进程等在任何 Linux 操作系统上的命令。
到本文末尾,您将像 Linux 专业人士一样通过命令行管理进程标识号(PIDs)。继续阅读,了解 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 系统上进程的命令。每个部分都将建立在上一个部分的基础之上。您将学习关于ps
、top
、pgrep
、kill
和pkill
命令,它们都是 Linux 的本机命令。
作为奖励,如果您不喜欢 Linux 本机命令,还包括了 PowerShell 等效命令Get-Process
和 Stop-Process
。
定位进程的工具
在终止进程之前,您必须找到要目标的正确进程。唯一的 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
开关,仅显示特定用户的进程。如下例所示,仅显示与用户IDbkindle
匹配的PID。

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
.同样,使用 `` 开关指定用户ID以仅检索与该特定用户相关联的进程。如下所示,仅返回用户 `
bkindle
` 和 vmtoolsd
进程的单个PID。

vmtoolsd
process associated with the user bkindle
.使用PowerShell的 Get-Process
在Linux中查找进程
典型的Linux命令效果很好,但您知道PowerShell也能够管理Linux进程吗?Get-Process
命令类似于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
来确定kill
命令中使用的进程pwsh
的PID。 - 使用
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。这可能使终止进程成为一个复杂的多步骤过程。pkill
命令,包含在procps和procps-ng软件包中,根据搜索的名称终止进程。
功能上,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
在Linux中终止进程。再次假设你正在运行一个PowerShell的pwsh
进程。
- 使用
Get-Process -ProcessName 'pwsh'
来查找PID,并记下要终止的PID。 - 使用
Stop-Process -Id 29992,30014
来终止返回的多个进程。 - 使用
Get-Process -ProcessName 'pwsh'
来验证PID,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连接远程终止进程,或者终止可能在容器中运行的进程。