如何在 Linux 中检查进程是否正在运行

LinuxLinuxBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将学习用于管理和监控进程的基础 Linux 技能。你将探索如何使用 ps aux 命令列出系统上所有正在运行的进程,该命令会提供当前进程的快照,并包含用户、PID、CPU 和内存使用情况等详细信息。

此外,你将了解如何使用 pgrep 命令高效地查找特定进程,并通过使用 top 命令深入了解实时进程活动和资源消耗情况。这些技术对于系统管理、故障排除和理解系统性能至关重要。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/ProcessManagementandControlGroup(["Process Management and Control"]) linux(("Linux")) -.-> linux/SystemInformationandMonitoringGroup(["System Information and Monitoring"]) linux/ProcessManagementandControlGroup -.-> linux/kill("Process Terminating") linux/ProcessManagementandControlGroup -.-> linux/pkill("Pattern-Based Killing") linux/SystemInformationandMonitoringGroup -.-> linux/ps("Process Displaying") linux/SystemInformationandMonitoringGroup -.-> linux/top("Task Displaying") subgraph Lab Skills linux/kill -.-> lab-558747{{"如何在 Linux 中检查进程是否正在运行"}} linux/pkill -.-> lab-558747{{"如何在 Linux 中检查进程是否正在运行"}} linux/ps -.-> lab-558747{{"如何在 Linux 中检查进程是否正在运行"}} linux/top -.-> lab-558747{{"如何在 Linux 中检查进程是否正在运行"}} end

使用 ps aux 列出正在运行的进程

在这一步中,你将学习如何使用 ps 命令查看 Linux 系统上当前正在运行的进程。进程简单来说就是正在运行的程序。了解如何列出和识别进程是 Linux 系统管理和故障排除的一项基本技能。

ps 命令用于报告当前进程的快照。当与某些选项一起使用时,它可以提供大量详细信息。

让我们使用带有 aux 选项的 ps 命令。这些选项通常一起使用,以用户友好的格式显示系统上运行的所有进程。

  • a:显示所有进程。
  • u:显示进程的用户和所有者。
  • x:显示没有控制终端的进程(有助于查看后台进程)。

如果终端尚未打开,请打开它。默认情况下,你应该位于 ~/project 目录中。

输入以下命令并按回车键:

ps aux

你将看到一长串进程,类似于以下内容(具体输出会有所不同):

USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.1  16840  9880 ?        Ss   Jul23   0:01 /sbin/init
root           2  0.0  0.0      0     0 ?        S    Jul23   0:00 [kthreadd]
root           3  0.0  0.0      0     0 ?        I<   Jul23   0:00 [rcu_gp]
...
labex      12345  0.1  0.5 123456 54321 pts/0    Ss   HH:MM   0:00 /usr/bin/zsh
labex      12367  0.0  0.1  21000  5000 pts/0    R+   HH:MM   0:00 ps aux
...

让我们来分析一下你看到的各列:

  • USER:拥有该进程的用户。
  • PID:进程 ID,每个正在运行的进程都有一个唯一的编号。
  • %CPU:进程使用的 CPU 时间百分比。
  • %MEM:进程使用的物理内存百分比。
  • VSZ:虚拟集大小(Virtual Set Size),即进程使用的虚拟内存总量。
  • RSS:常驻集大小(Resident Set Size),即进程使用的物理内存量。
  • TTY:进程的控制终端(如果有)。? 表示没有控制终端。
  • STAT:进程状态(例如,R 表示正在运行,S 表示睡眠,Z 表示僵尸进程)。
  • START:进程启动的时间。
  • TIME:进程累计使用的 CPU 时间。
  • COMMAND:启动该进程的命令。

滚动查看这个输出可能会让人感到不知所措。在下一步中,你将学习如何过滤这个输出以查找特定进程。

点击 继续 以继续操作。

使用 pgrep 查找特定进程

在上一步中,你看到 ps aux 会产生大量输出。通常,你只想查找特定的进程。pgrep 命令就是为此目的而设计的。它根据进程名称搜索进程,并返回它们的进程 ID(PID)。

pgrep 的基本语法是 pgrep [选项] 模式模式 通常是你要查找的进程名称。

让我们尝试查找 zsh 进程的 PID,zsh 是你当前在终端中使用的 shell。

输入以下命令并按回车键:

pgrep zsh

你应该会看到一个或多个数字打印到终端上。这些就是正在运行的 zsh 进程的 PID。

12345

(实际数字会因你而异)。

如果你想查看 pgrep 找到的 PID 对应的完整命令,可以将其与 ps 命令结合使用。ps-p 选项允许你指定一个 PID。

让我们使用 zsh 进程的 PID 来查找其完整命令。首先,再次运行 pgrep zsh 以获取当前的 PID。假设在这个示例中 PID 是 12345(将 12345 替换为你实际得到的 PID)。

现在,使用 ps -p 后跟 PID:

ps -p 12345

你将看到类似以下的输出:

    PID TTY          TIME CMD
  12345 pts/0    00:00:00 zsh

这证实了 PID 12345 对应于 zsh 命令。

当你知道进程名称时,pgrep 是一种快速查找进程 PID 的方法。当你需要将 PID 用于其他命令时,这尤其有用,例如终止进程(你将在未来的实验中学习到)。

点击 继续 进入下一步。

使用 top 命令监控进程详情

在这一步中,你将了解 top 命令,它能为你提供系统中正在运行的进程的动态实时视图。ps aux 命令提供的是一个静态快照,而 top 命令会持续更新,让你了解哪些进程正在占用最多的 CPU 和内存资源。

top 命令对于监控系统性能以及识别可能正在消耗过多资源的进程非常有用。

在你的终端中输入以下命令并按下回车键:

top

你的终端界面将切换,显示一个不断更新的进程列表。输出内容大致如下:

top - HH:MM:SS up  X days, HH:MM,  X users,  load average: X.XX, X.XX, X.XX
Tasks: XXX total,   X running, XXX sleeping,   X stopped,   X zombie
%Cpu(s):  X.X us,  X.X sy,  X.X ni, XX.X id,  X.X wa,  X.X hi,  X.X si,  X.X st
MiB Mem :  XXXX.X total,  XXXX.X free,  XXXX.X used,  XXX.X buff/cache
MiB Swap:  XXXX.X total,  XXXX.X free,  XXXX.X used. XXXX.X avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
  12345 labex     20   0  123456  54321  32100 S   0.1   0.5   0:00.10 zsh
  12367 labex     20   0   21000   5000   3000 R   0.0   0.1   0:00.05 top
  ...

让我们来看看 top 命令输出的关键区域:

  • 摘要区域(顶部):此部分显示系统的摘要信息,包括:

    • 当前时间和系统运行时长。
    • 登录用户的数量。
    • 系统负载平均值(过去 1 分钟、5 分钟和 15 分钟内等待运行的进程的平均数量)。
    • 任务(进程)的总数及其状态(运行、睡眠、停止、僵尸)。
    • CPU 使用率细分(用户态、系统态、空闲等)。
    • 内存使用情况(总量、空闲、已使用、缓冲区/缓存)。
    • 交换空间使用情况。
  • 进程列表区域(底部):此部分列出了各个进程,默认按照 CPU 使用率排序。这些列与 ps aux 命令的输出类似,但 top 会实时更新这些信息。关键列包括:

    • PID:进程 ID。
    • USER:进程的所有者。
    • %CPU:CPU 使用率百分比。
    • %MEM:内存使用率百分比。
    • COMMAND:命令名称。

top 命令运行时,你可以使用各种按键与之交互:

  • 按下 q 键退出 top 命令。
  • 按下 M 键按内存使用率对进程列表进行排序。
  • 按下 P 键按 CPU 使用率对进程列表进行排序(这是默认排序方式)。
  • 按下 k 键终止一个进程(系统会提示你输入要终止进程的 PID)。使用此功能时请务必谨慎!

花点时间观察这些进程以及 CPU 和内存使用率的变化情况。你会发现 top 进程本身位于列表的顶部附近,因为它正在积极使用 CPU 来更新显示内容。

当你完成对 top 命令的探索后,按下 q 键退出并返回到常规的终端提示符。

点击 继续 完成此步骤和本次实验。

总结

在本次实验中,你学习了在 Linux 系统中检查进程是否正在运行的基本技术。你首先使用 ps aux 命令列出系统中所有正在运行的进程,了解了诸如 USERPID%CPU%MEM 等不同列的含义,这些列提供了进程活动的静态快照。

接着,你探索了如何使用 pgrep 命令高效地查找特定进程,该命令根据进程的名称或其他属性进行搜索,并返回它们的进程 ID(PID)。最后,你学习了如何使用 top 命令实时监控进程详情,它提供了系统资源使用情况和各个进程统计信息的动态视图,使你能够观察 CPU 和内存的消耗情况。