当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 使用 ps、pgrep、pkill 等掌握 Linux Kill 进程

作者:精品下载站 日期:2024-12-14 13:05:38 浏览:13 分类:玩电脑

使用 ps、pgrep、pkill 等掌握 Linux Kill 进程


对于新系统管理员 (sysadmin) 来说,管理 Linux 中的进程一开始可能会令人畏惧。但通过一些解释和演示,您将了解如何查找并执行 Linux 终止进程,只需使用 pskill 等命令行工具即可。

在本文中,您将学习用于在任何 Linux 操作系统上定位正在运行和错误的进程、终止(终止)正在运行的进程、查找后台进程等的命令。

在本文结束时,您将像 Linux 专业人士一样从命令行根据进程标识号 (PID) 管理进程。继续阅读以了解有关 Linux 中进程管理命令的所有信息!

先决条件

本文将演练如何在 Linux 中管理进程。如果您想亲自动手,您将需要以下内容:

  • Linux主机,可以是虚拟机,也可以是物理机。
  • 要尝试 PowerShell 示例,请在 Linux 主机上安装 PowerShell 7.1.1。
  • 非 root 用户帐户。虽然不需要 root 访问权限,但会有一个示例,其中 root 用户可以终止另一个用户正在运行的进程。

您选择使用的 Linux 发行版由您决定。本文将基于 Ubuntu 20.04 LTS。但是,这些命令是 Linux 操作系统的标准命令。

准备好开始了吗?好,让我们开始吧。

管理 Linux 中的进程

有时,您可能会遇到需要停止 Linux 系统上正在运行的进程的情况。例如,您可能有一个按计划运行的 bash 脚本。该 bash 脚本配置为通过 cron 作业(Linux 进程调度程序)以另一个用户身份运行。

有时,此脚本会产生错误的进程,从而导致脚本失败。如何在不重新启动系统或停止脚本的情况下杀死那些错误的进程?

在接下来的部分中,您将逐步了解用于在 Linux 系统上查找和终止或终止进程的命令。每个部分都将建立在最后一个部分的基础上。您将了解 pstoppgrepkillpkill 命令全部是 Linux 原生的。

作为奖励,如果 Linux 本机命令不是您的风格,则还包括 PowerShell 等效命令 Get-ProcessStop-Process

定位流程的工具

在终止进程之前,您必须找到要定位的正确进程。独特的 PID 可实现精确定位。继续阅读以了解如何找到正确的终止进程。

使用ps命令显示进程信息

进程状态ps命令显示与Linux系统上活动进程相关的信息。您可以使用 ps 定位正在运行的进程,甚至后台进程

默认情况下,命令 ps 将显示当前用户的有效用户标识 (EUID) 的所有进程。运行 ps 命令(如下所示)将返回用户可以终止的每个正在运行的进程。

ps

[玩转系统] 使用 ps、pgrep、pkill 等掌握 Linux Kill 进程

使用 top 命令查找扩展的进程信息

如果您想查找有关正在运行的进程和系统指标的不断刷新的信息,在这种情况下,您可以使用 top 命令。与ps不同,top命令会在设定的时间间隔内更新屏幕上的进程信息。

当您运行 top 命令时,您将看到的不仅仅是 PID。进程详细信息包括 CPU 和内存百分比、Nice 值(CPU 调度进程优先级)以及 Linux 内核设置的进程优先级 (PR)。

对于新的或经验丰富的系统管理员来说,top 命令通常是管理重要系统资源和进程的主要工具。如下所示,top 命令输出比 ps 命令显示更多的进程信息,包括总体系统指标。

[玩转系统] 使用 ps、pgrep、pkill 等掌握 Linux Kill 进程

htoptop 的增强变体,其中包括各种改进,例如彩色终端输出。

假设您想检查进程消耗的内存或 CPU 资源。在这种情况下,您可以使用 topp 开关,如下所示。

top -p 2113

[玩转系统] 使用 ps、pgrep、pkill 等掌握 Linux Kill 进程

也许您需要显示特定用户名的所有正在运行的进程。 top 命令提供 u 开关来仅显示特定用户的进程。如下例所示,仅显示与用户 ID bkindle 匹配的 PID。

top -u bkindle

[玩转系统] 使用 ps、pgrep、pkill 等掌握 Linux Kill 进程

使用 pgrep 命令查找特定进程 PID

pgrep 最初是一个 Solaris 命令,后来被移植到 Linux 上使用。 pgrep 结合了 grep 命令的搜索能力和 ps 的进程管理功能,在查找目标的确切进程方面提供了灵活性。

尽管 ps 显示更多信息,但 pgrep 被设计为仅返回所返回进程的 PID。 pgrep 使用许多可用的搜索参数帮助定位进程。在以下示例中,pgrep 显示搜索与 vmtoolsd 匹配的任何进程。

pgrep vmtoolsd

[玩转系统] 使用 ps、pgrep、pkill 等掌握 Linux Kill 进程

同样,使用 u 开关指定用户 ID,以仅检索与该特定用户关联的进程。如下所示,仅为用户 bkindlevmtoolsd 进程返回单个 PID。

pgrep -u bkindle vmtoolsd

[玩转系统] 使用 ps、pgrep、pkill 等掌握 Linux Kill 进程

在 Linux 中使用 PowerShell 的 Get-Process 查找进程

典型的 Linux 命令效果很好,但您知道 PowerShell 也能够管理 Linux 进程吗? Get-Process cmdlet 的工作方式与 Linux ps 命令类似,并返回进程信息。例如,也许您需要查找当前用户 bkindle 正在运行的所有进程。如下所示,找到用户bkindle的所有PID(通过Get-Process标记为ID)。

Get-Process -IncludeUserName |
	Where-Object {$_.UserName -eq 'bkindle'} |
	Select-Object -Property 'Id','UserName','ProcessName'

[玩转系统] 使用 ps、pgrep、pkill 等掌握 Linux Kill 进程

相关:如何使用 PowerShellWhere-Object 来过滤所有内容

学习了如何定位不同的进程后,请继续阅读以发现在 Linux 中终止或杀死进程的所有方法!

在 Linux 中使用 Kill 命令终止进程

在前面的部分中,您学习了如何使用本机 Linux 和 PowerShell 命令找到要向其发送终止信号的进程的 PID。接下来的部分将解释如何使用 killpkill 程序、其关联信号和命令行开关。

Linux 信号和进程管理

信号是 Linux 用来与操作系统中运行的进程进行通信的方法。 kill 命令用来终止进程的三个主要信号是:

  • 1 (SIGHUP) - 终止交互式程序并导致守护程序(后台服务)重新读取进程使用的配置文件。
  • 9 (SIGKILL) - 强制进程退出而不执行正常关闭任务。
  • 15 (SIGTERM) - 允许进程正常终止,例如完成后关闭打开的文件。这是使用kill命令时未指定数字时使用的默认信号。

虽然本文只关注用于终止进程的三个主要信号,但总共有 64 个可用信号。使用 kill -l 获取信号列表及其对应的编号。

现在您已经了解了终止进程所使用的三个主要信号,接下来的部分将介绍如何终止进程。

使用 kill 命令终止进程

在下一个示例中,您将使用 kill 命令。假设您正在运行一个名为 pwsh 的 PowerShell 实例,分配的 PID 为 22687。终止此进程的一种方法如下所示。

  1. 使用 pgrep pwsh 确定 pwsh 进程的 PID(在 kill 命令中使用)。
  2. 使用 kill -s TERM 22687 正常终止 pwsh 进程。 TERM 命令映射到 15 (SIGTERM) 信号,并使用 kill 命令的 s 参数进行指示。
  3. 使用您选择的 toppspgrep 来验证 PID 不再列出。

下面显示的是 Ubuntu 20.04 LTS bash 终端的上述过程的示例。

[玩转系统] 使用 ps、pgrep、pkill 等掌握 Linux Kill 进程

killall 命令将根据名称而不是 PID 终止所有进程,如果不小心使用,这可能会使该命令具有相当大的破坏性。但是,如果您选择使用此命令,请使用 i 选项使命令要求确认。

使用 pkill 按名称终止进程

您可能已经注意到 kill 命令仅适用于进程 ID。这可能会使终止进程成为一个复杂的多步骤过程。 pkill 命令包含在 procps 和 procps-ng 包中,根据搜索的名称终止进程。

从功能上讲,pkill 命令充当 pgrep 程序的包装器。 pkill 命令向找到的每个进程发送指定的信号,而不是仅在终端中列出 PID。 pkillkill 的不同之处在于,pkill 只能使用进程的名称,而不能使用 PID。

默认情况下,pkill 命令在 Ubuntu 20.04 LTS 中不可用。您必须下载并安装该应用程序。为此,请运行sudo apt install mcollective-plugins-process -y

要使用 pkill 终止进程,请执行以下步骤:

  1. 使用 ps 验证 Nano 应用程序(命令行文本编辑器)当前是否正在运行。此步骤是可选的,但在终止进程之前进行安全检查。
  2. 使用 pkill -9 nano 强制终止 nano 应用程序。

下面显示的是 Ubuntu 20.04 LTS bash 终端的上述过程的示例。

[玩转系统] 使用 ps、pgrep、pkill 等掌握 Linux Kill 进程

使用 Top 命令终止进程

当您运行 top 命令查看正在运行的进程时,您可以使用 k 按键终止给定进程。您将看到一个交互式提示,询问要终止的进程的 PID。

如下图,运行top命令,按k输入要杀掉的PID,按Enter键立即终止PID。

[玩转系统] 使用 ps、pgrep、pkill 等掌握 Linux Kill 进程

接下来,使用 PowerShell Stop-Process 命令了解本机 Linux 命令的另一种替代方法!

使用 PowerShell Stop-Process 命令终止进程

如果 Linux 本机命令不是您的风格,PowerShell 可以满足您的需求!与 kill 命令一样,您可以在 Linux 中使用 Stop-Process cmdlet 终止进程。再次假设您正在运行 PowerShell pwsh 进程。

  1. 使用 Get-Process -ProcessName 'pwsh' 查找 PID,并记下要终止的 PID。
  2. 使用 Stop-Process -Id 29992,30014 终止返回的多个进程。
  3. 使用 Get-Process -ProcessName 'pwsh' 并验证 PID,2999230014 不再列出,这意味着它们已被终止。

您还可以使用 Get-Processkill 方法终止一个或多个进程:(Get-Process -Id [PID]).Kill()(Get-Process -Id [PID1,2,3,4]).Kill()

使用 ProcessName 参数时请务必小心。使用此参数的行为类似于 killall 命令,并且将杀死与提供的名称匹配的所有进程

下面是来自 Ubuntu 20.04 LTS bash 终端的上述过程的示例。

[玩转系统] 使用 ps、pgrep、pkill 等掌握 Linux Kill 进程

下一步

您现在应该知道在 Linux 中查找和终止进程的多种方法!对于您的下一个挑战,请尝试使用 SSH 连接远程终止进程或终止可能在容器中运行的进程。

相关:Linux 世界中的 Windows 专家:在 Linux 中设置 SSH

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯