Linux/Unix 中的 ps 命令及示例

17 Mar 2025 | 6 分钟阅读

ps 命令用于查看系统中当前正在运行的进程。它可以帮助我们确定系统中哪个进程在做什么,它使用了多少内存,占用了多少 CPU 空间,用户 ID,命令名等。

ps 命令简介

ps 命令显示选定正在运行进程的详细信息。如果我们希望重复的选定更新和显示的信息,可以使用 top 命令代替。

此版本的 ps 命令接受许多类型的选项,如下所述

  • UNIX 选项可以统一,并必须后跟一个连字符。
  • GNU 长选项后跟两个连字符。
  • BSD 选项可以统一,并且不得与连字符一起使用。

不同类型的选项可以自由混合,但可能会发生冲突。由于 ps 命令兼容的几个 ps 实现和标准,存在一些功能相同的同义选项。

注意:ps -aux 命令与 ps aux 命令不同。UNIX 和 POSIX 标准要求 ps -aux 命令打印由任何名为 x 的用户拥有的每个进程,并打印由 -a 标志选择的每个进程。

  • 如果用户名 x 不存在,ps 命令可能会将该命令解释为 ps aux 命令,并显示警告。这种行为有助于过渡旧习惯和脚本。它可能发生变化,不稳定,因此不应依赖。
  • ps 命令默认选择与当前用户具有相同有效用户 ID 且与调用者具有相同终端的每个进程。它显示进程 ID,与进程对应的终端,以 [DD-]hh:mm:ss 格式累积的 CPU 时间,以及可执行文件名。默认情况下,结果是未排序的。
  • 使用 BSD 风格的选项将把进程状态包含在默认显示中,并显示命令参数而不是可执行文件名。我们可以使用环境变量 PS FORMAT 来覆盖它。
  • 此外,使用 BSD 风格的选项将修改进程选择,以包含我们拥有的许多终端上的进程。也可以通过将选择配置为排除由其他用户拥有或不在任何终端上的进程来指定。
  • 如果选项被指定为相同,则不会考虑这些结果,因此 -M 选项将被视为与 Z 选项相同,依此类推。

ps 命令的实现

KolibriOS 包含 ps 命令的实现。此外,此命令已被移植到 IBM i OS。ps 命令是 Windows PowerShell 中 Get-Process cmdlet 的预定义命令别名,它本质上起着类似的作用。

标题行

  • %CPU: 显示进程正在使用多少 CPU。
  • %MEM: 显示进程正在使用多少内存。
  • ADDR: 显示进程的内存地址。
  • CP 或 C: 显示调度信息和 CPU 使用情况。
  • COMMAND*: 显示进程名称,包括可用参数。
  • NI: 显示 nice 值。
  • F: 显示标志。
  • PID: 显示进程 ID 的编号。
  • PPID: 显示进程的父进程编号。
  • PRI: 显示进程的优先级。
  • RSS: 代表驻留集大小。
  • STAT 或 S: 显示进程的状态码。
  • STIME 或 START: 显示进程启动的时间。
  • TIME: 显示进程使用的 CPU 时间量。
  • VSZ: 显示虚拟内存使用情况。
  • TTY 或 TT: 显示与进程对应的终端。
  • USER 或 UID: 显示进程所有者的用户名。
  • WCHAN: 显示进程正在等待的事件的内存地址。

ps 命令的环境变量

以下环境变量会影响 ps 的执行

  • COLUMNS: 它覆盖了系统选择的水平显示行的长度,用于确定要显示的文本列总数。
  • LANG: 它为国际化变量提供默认值,该变量为 null 或未设置。
  • LC_ALL: 如果设置为任何非空字符串值,它将覆盖所有国际化变量的值。
  • LC_CTYPE: 它调节区域设置,用于解释文本数据的字节序列作为字符(例如,单字节与多字节字符在参数中)。
  • LC_TIME: 它调节显示的时间和日期字符串的内容和格式。
  • LC_MESSAGES: 它调节应使用的区域设置,以影响为标准错误指定的诊断消息的内容和格式,以及为标准输出指定的通知消息。
  • NLSPATH: 它确定 LC_MESSAGES 实现的消息目录位置。
  • TZ: 它确定用于计算显示的时间和日期字符串的时区。如果 TZ 为 null 或未设置,将使用未定义的默认时区。

ps 命令在不同系统上可能显示不同的结果,因为它显示的是系统当前运行进程的信息。

语法


Ps1

查看上面的截图,输出显示了 4 列。

  • PID 是正在运行命令的进程 ID
  • TTY 是当前命令运行的终端类型
  • TIME 告诉 CPU 花了多少时间来运行进程
  • CMD 是当前命令

ps 命令支持 3 种使用语法样式

  • Unix, 可以分组并以连字符开头
  • BSD, 可以分组但不能以连字符开头
  • GNU, 长选项并以双连字符开头

选项

选项函数
ps -ef / -aux以完整格式列出当前正在运行的进程
ps -ax列出当前正在运行的进程
ps -u <用户名>列出特定用户的进程
ps -C <命令>列出给定命令的进程
ps -p <PID>列出给定 PID 的进程
ps -ppid <PPID>列出给定 ppid 的进程
pstree显示进程层次结构
ps -L列出特定进程的所有线程
ps --sort pmem查找内存泄漏
ps -eo显示安全信息
ps -U root -u root u显示 root 运行的进程

Linux ps -ef 和 ps -aux

要以完整格式显示系统中所有当前正在运行的进程,可以使用两种类型的命令。

语法

此处,

e 显示所有进程

f 显示完整格式列表

语法


fullformat1

查看上面的截图,它显示了我们系统上的所有正在运行的进程。

语法


fullformat2

查看上面的截图,此命令按 CPU 或内存使用情况过滤结果。它帮助您确定进程使用了多少内存或占用了多少 CPU 空间。

Linux ps -ax

此命令显示系统中的所有进程。这里,a 代表all(所有)。它将显示一个长列表结果。

语法


psax1

查看上面的截图,它没有以完整格式显示信息,而是显示了系统中所有正在运行进程的列表。

Linux ps -u <用户名>

选项 u 显示特定用户的进程。您还可以指定多个用户名,用逗号分隔。

语法

示例

ps -f -u akki,sssit

psu1

查看上面的截图,使用命令 "ps -f -u akki,sssit" 显示了 akki 和 sssit 的进程。

Linux ps -C <命令>

选项 C 显示带有作为参数提到的命令的进程列表。

语法

示例


pxC1

查看上面的截图,它显示了命令执行中包含 firefox 的所有进程。

Linux ps -f -p <PID>

每个进程都被分配了一个特定的进程 ID 号。

一个进程可能有很多子进程列在其下方。这些子进程中的每一个也将拥有自己的 PID 号。因此,一个进程将拥有自己的 PID 号,并可能有一个父 PID 号。

选项 p 显示具有提到的 PID 号的进程列表。

语法

语法


psp1

查看上面的截图,它显示了具有提到的 PID 号的进程。

Linux ps -f --ppid <PPID>

如前所述,一些进程可能除了 PID 号外还有 PPID。通过提及 PPID 号可以列出所有具有相同 PPID 号的子进程。

语法

示例

ps -f --ppid 1517


Psppid1

查看上面的截图,这里列出了 PPID 1517 的所有子进程。