PS(1) General Commands Manual PS(1)

# 名称

ps - 输出当前进程的快照。

# 概述

**ps** \[*选项* ...]

# 描述

**ps** 显示关于选定的活动进程的信息。如果您想要随时更新选择标准和所显示的信息，请改用 **top**。

此版本的 **ps** 接受多种选项。

•

Unix 选项，可以分组列出，并且前面必须有短横线 "-"。

•

BSD 选项，可以分组列出，并且不能加上短横线。

•

GNU 长选项，前面有两个短横线 "--"。

不同类型的选项可以自由组合，但也有可能会出现冲突。由于此 **ps** 兼容许多标准和 **ps** 实现，因此存在一些功能相同的同义选项。

默认情况下，**ps** 选择与当前用户具有相同有效用户 ID (euid=EUID) 并与调用者关联到同一终端的所有进程。它显示进程 ID (pid=PID)、与进程关联的终端 (tname=TTY)、\[DD-]hh:mm:ss 格式的累计 CPU 时间 (time=TIME) 以及可执行文件名称 (ucmd=CMD) 。默认情况下，不对输出进行排序。

使用 BSD 风格选项会将进程状态 (stat=STAT) 添加到默认显示，并显示命令参数 (args=COMMAND) 而不是可执行文件名称。您可以使用 **PS\_FORMAT** 环境变量覆盖它。使用 BSD 风格的选项还将更改进程选择标准，以包括您拥有的其他终端 (TTY) 上的进程；或者，也可以描述为选择所有进程，除了其他用户拥有的或不处于终端上的进程。之后我们说两个选项 "相同" 时，指的是不考虑上述区别，因此 **-M** 会被视为与 **Z** 相同，等等。

除了在下面另行说明的情况以外，进程选择选项是加性的。默认选择的进程会被丢弃，然后将所选进程添加到要显示的进程集合中。因此，如果进程满足任一给定的选择标准，就会显示该进程。

# 示例

要使用标准语法查看系统上的每个进程：

**ps -e**  
**ps -ef**  
**ps -eF**  
**ps -ely**

要使用 BSD 语法查看系统上的每个进程：

**ps ax**  
**ps axu**

要打印进程树：

**ps -ejH**  
**ps axjf**

要获得关于线程的信息：

**ps -eLf**  
**ps axms**

要获得安全信息：

**ps -eo euser,ruser,suser,fuser,f,comm,label**  
**ps axZ**  
**ps -eM**

要以用户格式查看以 root 身份（真实和有效 ID）运行的每个进程：

**ps -U root -u root u**

要使用用户定义的格式查看所有进程：

**ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm**  
**ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm**  
**ps -Ao pid,tt,user,fname,tmout,f,wchan**

仅打印 syslogd 的进程 ID：

**ps -C syslogd -o pid=**

仅打印 PID 为 42 的进程名称：

**ps -q 42 -o comm=**

# 简单的进程选择

[**a**](#a)

解除 BSD 风格中的 "仅你自己的" 限制，该限制在使用某些 BSD 风格（不带 "-"）的选项，或 **ps** 特色设置为类似 BSD 时，会被应用于所有进程的集合。以这种方式选择的进程集合会与通过其他方式选择的进程集合相加。另一种描述是，此选项使 **ps** 列出所有带有终端 (tty) 的进程，或者，当与 **x** 选项同时使用时，列出所有进程。

[**-A**](#A)

选择所有进程。与 **-e** 相同。

[**-a**](#a~2)

选择除了会话头领（参见 [*getsid*(2)](/man/os/procps/getsid.2)）和没有关联到终端的进程以外的所有进程。

[**-d**](#d)

选择除了会话头领以外的所有进程。

[**--deselect**](#deselect)

选择除了满足指定条件的进程以外的所有进程（反向选择）。与 **-N** 相同。

[**-e**](#e)

选择所有进程。与 **-A** 相同。

[**g**](#g)

真的选择所有进程，甚至包括会话头领。该标志已过时，并且可能在未来版本中停止使用。通常来说 **a** 标志会隐含启用该选项，而且该选项仅在设置为 sunos4 特色时才有用。

[**-N**](#N)

选择除了满足指定条件的进程以外的所有进程（反向选择）。与 **--deselect** 相同。

[**T**](#T)

选择关联到此终端的所有进程。与不带参数的 **t** 选项相同。

[**r**](#r)

将选择限制为仅包含正在运行的进程。

[**x**](#x)

解除 BSD 风格中的 "必须有 tty" 限制，该限制在使用某些 BSD 风格（不带 "-"）的选项，或 **ps** 特色设置为类似 BSD 时，会被应用于所有进程的集合。以这种方式选择的进程集合会与通过其他方式选择的进程集合相加。另一种描述是，此选项使 **ps** 列出您拥有（与 **ps** 具有相同的 EUID）的所有进程，或者，当与 **a** 选项同时使用时，列出所有进程。

# 通过列表选择进程

这些选项接受单个参数，格式是以空格或逗号分隔的列表。这些选项可以多次使用。例如：**ps -p "1 2" -p 3,4**

*123*

与 **--pid 123** 相同。

+*123*

与 **--sid 123** 相同。

-*123*

按照进程组 ID (PGID) 进行选择。

[**-C 命令列表**](#C)

按照命令名称进行选择。这将选择可执行文件名称位于给定的 *命令列表* 中的进程。注意：命令名称和命令行是不同的。以前版本的 procps 和内核将命令名称截断为 15 个字符。现在两者的限制都已不再存在。如果您依赖于仅和 15 个字符进行匹配，则可能不再能得到匹配项。

[**-G 组列表**](#G)

按照真实组 ID (RGID) 或名称进行选择。这将选择真实组名称或 ID 在 *组列表* 中的进程。真实的组 ID 表示创建进程的用户所属的组，参见 [*getgid*(2)](/man/os/procps/getgid.2)。

[**-g 组列表**](#g~2)

按照会话或有效组名称进行选择。许多标准都指定了按照会话进行选择，但按照有效组进行选择是其他几个操作系统在逻辑上的行为。当列表完全是数字时（就像会话那样），此版本的 **ps** 将按会话进行选择。仅当还指定了某些组名称时，才能使用组 ID。请参阅 **-s** 和 **--group** 选项。

[**--Group 组列表**](#Group)

按照真实组 ID (RGID) 或名称进行选择。与 **-G** 相同。

[**--group 组列表**](#group)

按照有效组 ID (EGID) 或名称进行选择。这将选择有效组名称或 ID 在 *组列表* 中的进程。有效组 ID 意味着进程将使用这个组的权限进行文件访问（请参阅 [*getegid*(2)](/man/os/procps/getegid.2)）。**-g** 选项通常是 **--group** 的替代选项。

[**p pid列表**](#p)

按照进程 ID 进行选择。与 **-p** 和 **--pid** 相同。

[**-p pid列表**](#p~2)

按照 PID 进行选择。这将选择进程 ID 位于 *pid列表* 中的进程。与 **p** 和 **--pid** 相同。

[**--pid pid列表**](#pid)

按照进程 ID 进行选择。与 **-p** 和 **p** 相同。

[**--ppid pid列表**](#ppid)

按照父进程 ID 进行选择。这将选择父进程 ID 位于 *pid列表* 中的进程。也就是说，这将选择 *pid列表* 中列出的进程的子进程。

[**q pid列表**](#q)

按照进程 ID 进行选择（快速模式）。与 **-q** 和 **--quick-pid** 相同。

[**-q pid列表**](#q~2)

按照 PID 进行选择（快速模式）。这将选择进程 ID 位于 *pid列表* 中的进程。使用此选项时，**ps** 仅读取 *pid列表* 中列出的 pid 的必要信息，并且不应用其他筛选规则。 pid 的顺序将被保留且不进行排序。此模式下不允许再添加选择选项、排序选项和森林类型的列表显示。与 **q** 和 **--quick-pid** 相同。

[**--quick-pid pid列表**](#quick)

按照进程 ID 进行选择（快速模式）。与 **-q** 和 **q** 相同。

[**-s 会话列表**](#s)

按照会话 ID 进行选择。这将选择会话 ID 位于 *会话列表* 中的进程。

[**--sid 会话列表**](#sid)

按照会话 ID 进行选择。与 **-s** 相同。

[**t tty列表**](#t)

按照 tty 进行选择。与 **-t** 和 **--tty** 几乎相同，但当 *tty列表* 为空时，这个选项可以返回与 **ps** 关联的终端。使用 **T** 选项被认为是比使用带有空 *tty列表* 的 **t** 选项更干净的做法。

[**-t tty列表**](#t~2)

按照 tty 进行选择。这将选择与 *tty列表* 中给定的终端关联的进程。终端（tty，或文本输出屏幕）可以用多种形式指定：/dev/ttyS1、ttyS1、S1。单纯的 "-" 可用于选择未依附于任何终端的进程。

[**--tty tty列表**](#tty)

按照终端进行选择。与 **-t** 和 **t** 相同。

[**U 用户列表**](#U)

按照有效用户 ID (EUID) 或名称进行选择。这将选择有效用户名称或 ID 位于 *用户列表* 中的进程。有效用户 ID 意味着进程将使用这个用户的权限进行文件访问（请参阅 [*geteuid*(2)](/man/os/procps/geteuid.2)）。与 **-u** 和 **--user** 相同。

[**-U 用户列表**](#U~2)

按照真实用户 ID (RUID) 或名称进行选择。这将选择真实用户名称或 ID 位于 *用户列表* 中的进程。真实用户 ID 表示创建进程的用户，请参见 [*getuid*(2)](/man/os/procps/getuid.2)。

[**-u 用户列表**](#u)

按照有效用户 ID (EUID) 或名称进行选择。这将选择有效用户名称或 ID 位于 *用户列表* 中的进程。

有效用户 ID 意味着进程将使用这个用户的权限进行文件访问（请参阅 [*geteuid*(2)](/man/os/procps/geteuid.2)）。与 **U** 和 **--user** 相同。

[**--User 用户列表**](#User)

按照真实用户 ID (RUID) 或名称进行选择。与 **-U** 相同。

[**--user 用户列表**](#user)

按照有效用户 ID (EUID) 或名称进行选择。与 **-u** 和 **U** 相同。

# 输出格式控制

这些选项用于选择 **ps** 显示的信息。输出可能依特色而发生改变。描述的末尾的括号中的选项是等效的格式串。

[**-c**](#c)

为 **-l** 选项显示不同的调度器信息。(**-O cls,pri**).

[**--context**](#context)

显示安全上下文格式（用于 SELinux）。(**-o pid,context,cmd**).

[**-f**](#f)

显示完整格式的列表。此选项可以与许多其他 Unix 风格选项组合使用，来添加其他列。此选项还会打印命令的参数。与 **-L** 同时使用时，将添加 NLWP（线程数）和 LWP（线程 ID）列。请参阅 **c** 选项、格式关键字 **args** 和格式关键字 **comm**。(**-o uid,pid,ppid,c,stime,tty,time,cmd**).

[**-F**](#F)

更加完整的格式。参见 **-f** 选项，因为 **-F** 隐含启用该选项。(**-o uid,pid,ppid,c,sz,rss,psr,stime,tty,time,cmd**).

[**--format 格式**](#format)

用户定义的格式。与 **-o** 和 **o** 相同。

[**j**](#j)

BSD 任务控制格式。(**-o ppid,pid,pgid,sid,tty,tpgid,stat,uid,time,cmd a**)

[**-j**](#j~2)

任务格式。(**-o pid,pgid,sid,tty,time,ucmd**)

[**l**](#l)

显示 BSD 长格式。(**-o f,uid,pid,ppid,pri,ni,vsz,rss,wchan,stat,tty,time,cmd a**)

[**-l**](#l~2)

长格式。**-y** 选项和此选项同时使用时通常很有用。(**-o f,uid,pid,ppid,c,pri,ni,addr,sz,wchan,tty,time,ucmd**)

[**-M**](#M)

添加一列安全数据。与 **Z** 相同（用于 SELinux）。(**-o context,pid,tty,time,ucmd**)

[**O 格式**](#O)

是预加载（重载）了的 **o**。BSD 风格的 **O** 选项的行为可以和 **-O**（用户定义的输出格式，预定义一些常用字段）一样，也可以用于指定排序顺序。我们使用了一些启发式算法来确定此选项的行为。为了能确保获得所需的行为（排序还是格式化），请以其他方式指定选项（例如使用 **-O** 或 **--sort**）。当用作格式化选项时，它与 **-O** 相同，但具有 BSD 特色。

[**-O 格式**](#O~2)

类似 **-o**，但预加载了一些默认的列。与 **-o pid,格式,state,tname,time,command** 或 **-o pid,格式,tname,time,cmd** 相同，见下文的 **-o**。

[**o 格式**](#o)

指定用户定义的格式。与 **-o** 和 **--format** 相同。

[**-o 格式**](#o~2)

用户定义的格式。*格式* 是单个参数，其格式是以空格或逗号分隔的列表，它提供了一种指定各个输出列的方法。可以识别的关键字参见下面的 **标准格式说明符** 一节。可以根据需要重命名列标题 (**ps -o pid,ruser=RealUser -o comm=Command**)。如果所有列标题均为空 (**ps -o pid= -o comm=**)，则不会输出表头。如果列标题过宽，列宽将根据需要进行增加；这一特性可以用于增加列宽，例如 WCHAN (**ps -o pid,wchan=WIDE-WCHAN-COLUMN -o comm**)。也提供显式的宽度控制 (**ps opid,wchan:42,cmd**)。**ps -o pid=X,comm=Y** 的行为依特色而发生变化；输出可以是名为 "X,comm=Y" 的一列或名为 "X" 和 "Y" 的两列。如有疑问，请使用多个 **-o** 选项。使用 **PS\_FORMAT** 环境变量来根据需要指定默认值；DefSysV 和 DefBSD 是两个宏，可以用于选择默认的 Unix 或 BSD 列。

[**-P**](#P)

增加一列，显示 **psr**。(**-o pid,psr,s,tty,time,ucmd**)

[**s**](#s~2)

显示信号格式。(**-o uid,pid,pending,blocked,ignored,caught,stat,tty,bsdtime,cmd a**)

[**u**](#u~2)

显示面向用户的格式。(**-o user,pid,pcpu,pmem,vsz,rss,tty,stat,start\_time,bsdtime,args a**)

[**v**](#v)

显示虚拟内存格式。(**-o pid,tty,stat,bsdtime,majflt,trs,drs,rss,pmem,args a**)

[**X**](#X)

寄存器格式。( **-o pid,stackp,esp,eip,tmout,alarm,stat,tty,bsdtime,args a**)

[**-y**](#y)

不要显示标志；显示 rss 而不是 addr。此选项仅能和 **-l** 同时使用。

[**Z**](#Z)

添加一列安全数据。与 **-M** 相同（用于 SELinux）。

# 输出修饰符

[**c**](#c~2)

显示真实的命令名称。该名称是从可执行文件名导出的，而不是从 argv 值导出的。因此不会显示命令参数及对其的任何修改。该选项实际上将 **args** 格式关键字转换为 **comm** 格式关键字；它对于 **-f** 格式选项和各种 BSD 风格格式选项很有用，这些选项通常都显示命令参数。请参阅 **-f** 选项、格式关键字 **args** 和格式关键字 **comm**。

[**--cols n**](#cols)

设置屏幕宽度。

[**--columns n**](#columns)

设置屏幕宽度。

[**--cumulative**](#cumulative)

包括一些已死亡的子进程的数据（作为总和显示在父进程中）。

[**-D 格式**](#D)

将 **lstart** 字段的日期格式设置为 *格式*。此格式由 [**strftime**(3)](/man/os/procps/strftime.3) 进行解析，最长应不超过 24 个字符，以免列错位。

[**--date-format 格式**](#date)

与 **-D** 相同。

[**--delimiter 分隔符**](#delimiter)

将列之间的分隔符设置为 *分隔符*，而不是可变长度的空格。必须是单个字符。

[**e**](#e~2)

在命令后显示环境变量。

[**f**](#f~2)

用 ASCII 字符艺术显示进程的层次结构（森林）。

[**--forest**](#forest)

用 ASCII 字符艺术显示进程树。

[**h**](#h)

没有表头。（或者，使用 BSD 特色时，每个屏幕显示一个表头）。**h** 选项有一个问题。标准 BSD **ps** 使用此选项时会在每页输出上打印表头，但较旧的 Linux **ps** 使用此选项时则完全禁用表头。此版本的 **ps** 遵循 Linux 用法，不打印表头，除非选择了 BSD 特色，而在这种情况下，它会在每页输出上打印表头。无论当前使用了什么特色，您都可以使用长选项 **--headers** 和 **--no-headers** 选项，分别表示在每页打印表头和完全禁用表头。

[**-H**](#H)

显示进程的层次结构（森林）。

[**--headers**](#headers)

重复显示表头行，每页输出显示一次。

[**k 说明符**](#k)

指定排序顺序。排序语法为 \[**+**|**-**]*键.RB \[,\[ + | - ].IR 键 \[,...]].* 从 **标准格式说明符** 一节中选择一个多字母的键。"+" 是可选的，因为默认方向是按照数字或字典序升序。与 **--sort** 相同。

示例：  
**ps jaxkuid,-ppid,+pid**  
**ps axk comm o comm,args**  
**ps kstart\_time -ef**

[**--lines n**](#lines)

设置屏幕高度。

[**n**](#n)

对于 WCHAN 和 USER，显示数字输出（包括各种类型的 UID 和 GID）。

[**--no-headers**](#no)

完全不打印表头行。**--no-heading** 是此选项的别名。

[**O 顺序**](#O~3)

排序顺序（重载）。BSD 风格的 **O** 选项的行为可以和 **-O**（用户定义的输出格式，预定义一些常用字段）一样，也可以用于指定排序顺序。我们使用了一些启发式算法来确定此选项的行为。为了能确保获得所需的行为（排序还是格式化），请以其他方式指定选项（例如使用 **-O** 或 **--sort**）。

对于排序，过时的 BSD 风格的 **O** 选项语法为 **O**\[**+**|**-**]*键1*\[,\[**+**|**-**]*键2*\[,...]]。它根据下面的 **过时的排序键** 一节中描述的单字母短键 *键1*,*键2*, ..." 的序列指定的多级排序来对进程列表进行排序。"+" 当前是可选的，仅重新强调排序键的默认方向，但可能有助于区分 **O**（排序）与 **O**（格式）。"-" 仅反转后面紧跟着的键的方向。

[**--rows n**](#rows)

设置屏幕高度。

[**S**](#S)

将死亡的子进程的一些信息，例如 CPU 使用情况，加到其父进程的信息中。这对于检查通过让父进程反复 fork 出生命周期很短的子进程来完成工作的系统很有用。

[**--sort 说明符**](#sort)

指定排序顺序。排序语法为 \[*+*|*-*]*键*\[,\[**+**|**-**]*键*\[,...]]。从 **标准格式说明符** 一节中选择一个多字母的键。"+" 是可选的，因为默认方向是按照数字或字典序升序。与 **k** 相同。例如： **ps jax --sort=uid,-ppid,+pid**

[**--signames**](#signames)

使用信号名称的缩写显示信号掩码，并扩展列的宽度。如果列宽无法显示所有信号，则该列将以加号 "*+*" 结尾。仅带有短横线 "-" 的列表示没有信号。

[**w**](#w)

宽版输出。使用该选项两次表示无限宽度。

[**-w**](#w~2)

宽版输出。使用该选项两次表示无限宽度。

[**--width n**](#width)

设置屏幕宽度。

# 线程显示

[**H**](#H~2)

像进程一样显示线程。

[**-L**](#L)

显示线程，如有可能，显示 LWP 和 NLWP 列。

[**m**](#m)

在进程之后显示线程。

[**-m**](#m~2)

在进程之后显示线程。

[**-T**](#T~2)

显示线程，如有可能，显示 SPID 列。

# 其他信息

[**--help 节**](#help)

打印帮助消息。*节* 参数可以是 *s*imple、*l*ist、*o*utput、*t*hreads、*m*isc 或 *a*ll 之一。参数可以缩写为带下划线的字母之一，也就是：s|l|o|t|m|a。

[**--info**](#info)

打印调试信息。

[**L**](#L~2)

打印所有格式说明符。

[**V**](#V)

打印 procps-ng 的版本。

[**-V**](#V~2)

打印 procps-ng 的版本。

[**--version**](#version)

打印 procps-ng 的版本。

# 备注

此 **ps** 通过读取 /proc 中的虚拟文件来工作。此 **ps** 不需要 setuid kmem 或任何其他特权即可运行。不要授予此 **ps** 任何特殊权限。

CPU 使用率目前表示为进程整个生命周期内处于运行状态的时间的百分比。这种算法并不理想，并且它也不符合 **ps** 在其他方面所遵守的标准。CPU 使用率加起来不太可能正好是 100%。

SIZE 和 RSS 字段不计算进程的某些部分，包括页表、内核栈、struct thread\_info 和 struct task\_struct。这些至少占 20 KiB 的驻留内存。SIZE 是进程的虚拟大小（代码+数据+堆栈）。

标记为 &lt;defunct&gt; 的进程是死亡的进程（所谓的 "僵尸进程"），它们之所以保留，是因为它们的父进程没有正确销毁它们。如果父进程退出，这些进程将被 [*init*(8)](/man/os/procps/init.8) 销毁。

如果用户名的长度大于显示的列的宽度，则用户名将被截断。请参阅 **-o** 和 **-O** 格式选项来自定义长度。

不建议使用 **ps -aux** 等命令选项，因为它会混淆两种不同的标准。根据 POSIX 和 Unix 标准，上述命令要求显示带有 TTY 的所有进程（通常是用户正在运行的命令）以及名为 *x* 的用户拥有的所有进程。如果该用户不存在，则 **ps** 将假定您的真正意思是 "**ps** *aux*"。

# 进程标志

下面这些值的总和将显示在 "F" 列中，该列由 **flags** 输出说明符启用：

1 已由 fork 产生，但未执行 exec 4 使用了超级用户权限

# 进程状态代码

以下是 **s**、**stat** 和 **state** 输出说明符（表头为 "STAT" 或 "S"）显示的各种值，用于描述进程的状态：

D 不可中断睡眠（通常为 I/O） I 空闲的内核线程 R 正在运行或可运行（位于运行队列） S 可中断睡眠（等待事件完成） T 被任务控制信号停止 t 在追踪过程中被调试器停止 W 正在换页（自 Linux 2.6 起无效） X 已死亡（不应出现） Z 已不存在的（"僵尸"）进程，已终止但未被其父进程收割

对于 BSD 格式，当使用 **stat** 关键字时，可能会显示其他字符：

&lt; 高优先级（对其他用户不 nice） N 低优先级（对其他用户 nice） L 拥有已锁定到内存中的页面（用于实时和自定义 I/O） s 是会话头领 l 是多线程的（使用 CLONE\_THREAD，就像 NPTL pthreads 那样） + 在前台进程组中

# 过时的排序键

这些键由 BSD 风格的 **O** 选项使用（当它用于排序时）。GNU **--sort** 选项不使用这些键，而是使用下面 **标准排序说明符** 一节中描述的说明符。请注意，排序中使用的值是 **ps** 使用的内部值，而不是某些输出格式字段中使用的 "经过处理的" 值（例如，按照 tty 排序将按设备编号排序，而不是根据显示的终端名称排序） 。如果要对 "经过处理的" 值进行排序，请将 **ps** 的输出通过管道发送给 [**sort**(1)](/man/os/procps/sort.1) 命令。

**键** **长名称** **描述** c cmd 可执行文件的简单名称 C pcpu CPU 利用率 f flags 长格式的 F 字段中的标志 g pgrp 进程组 ID G tpgid 控制 tty 的进程组 ID j cutime 累计用户时间 J cstime 累计系统时间 k utime 用户时间 m min\_flt 次要缺页的次数 M maj\_flt 主要缺页的次数 n cmin\_flt 次要缺页的累计次数 N cmaj\_flt 主要缺页的累计次数 o session 会话 ID p pid 进程 ID P ppid 父进程 ID r rss 驻留集大小 R resident 驻留页面数 s size 内存大小，单位为 KiB S share 共享页面数 t tty 控制 tty 的设备号 T start\_time 进程启动的时间 U uid 用户 ID 号 u user 用户名 v vsize 总 VM 大小 (KiB) y priority 内核调度优先级

# [AIX 格式描述符](#AIX_)

此 **ps** 支持 AIX 格式描述符，其工作方式有点类似于 [*printf*(1)](/man/os/procps/printf.1) 和 [*printf*(3)](/man/os/procps/printf.3) 的格式化代码。**标准** 代码将在下一节中描述。

**代码** **标准** **表头** %C pcpu %CPU %G group GROUP %P ppid PPID %U user USER %a args COMMAND %c comm COMMAND %g rgroup RGROUP %n nice NI %p pid PID %r pgid PGID %t etime ELAPSED %u ruser RUSER %x time TIME %y tty TTY %z vsz VSZ

# 标准格式说明符

以下是可用于控制输出格式（也就是用于选项 **-o**），或使用 GNU 风格的 **--sort** 选项对所选进程进行排序的各种关键字。

例如：**ps -eo pid,user,args --sort user**

此版本的 **ps** 尝试识别 **ps** 其他实现中使用的大多数关键字。

以下用户定义的格式说明符可能包含空格：**args**、**cmd**、**comm**、**command**、**fname**、**ucmd**、**ucomm**、**lstart**、**bsdstart**、**start**。

某些关键字可能不能用于排序。

**代码** **表头** **描述** **%cpu** **%CPU** 进程的 cpu 利用率，格式为 "##.#"。目前的计算方式是使用的 CPU 时间除以进程已运行的时间 (cputime/realtime)，以百分比表示。除非您运气好，否则加起来不会是 100%。（别名 **pcpu**）。 **%mem** **%MEM** 进程驻留集大小与机器的物理内存的比值，以百分比表示。（别名 **pmem**）。 **ag\_id** **AGID** 与进程关联的自动组标识符，它与 CFS 调度器配合，提高交互式桌面的性能。 **ag\_nice** **AGNI** 自动组的 nice 值，影响该组中所有进程的调度。 **args** **COMMAND** 以字符串表示的命令及其所有参数。可能会显示对参数的修改。列的内容可能包含空格。标记为 &lt;defunct&gt; 的进程是 "部分死亡" 的，等待被其父进程完全销毁。有时进程参数不可用；发生这种情况时，**ps** 将把可执行文件名打印在方括号中。（别名 **cmd**、**command**）。另请参见 **comm** 格式关键字、**-f** 选项和 **c** 选项。 当被指定于末尾时，该列将扩展到显示区域的边缘。如果 **ps** 无法确定显示宽度，例如当输出被重定向（通过管道发送）到文件或另一个命令时，输出宽度是未定义的（可能是 80，无限制，由 **TERM** 变量指定，等等）。在这种情况下，可以使用 **COLUMNS** 环境变量来精确指定宽度，也可以使用 **--cols**、**--columns** 或 **--width** 选项来覆盖这个环境变量。**w** 或 **-w** 选项也可用于调整宽度。 **blocked** **BLOCKED** 被阻塞的信号的掩码，参见 [*signal*(7)](/man/os/procps/signal.7)。根据字段的宽度，将显示十六进制格式的 32 位或 64 位掩码，除非使用了 **--signames** 选项。（别名 **sig\_block**、**sigmask**）。 **bsdstart** **START** 命令开始的时间。如果该进程是在不到 24 小时前启动的，则输出格式为 " HH:MM"，否则为 " Mmm:SS"（其中 Mmm 是月份的三个字母）。另请参见 **lstart**、 **start**、 **start\_time** 和  **stime**。 **bsdtime** **TIME** 累计 CPU 时间，用户 + 系统。显示格式通常为 "MMM:SS"，但如果进程使用的 CPU 时间超过 999 分钟，则可能被右移。 **c** **C** 处理器利用率。目前，它是进程生命周期内使用量百分比的整数值。（参见 **%cpu**）。 **caught** **CAUGHT** 被捕获的信号的掩码，参见 [*signal*(7)](/man/os/procps/signal.7)。根据字段的宽度，将显示十六进制格式的 32 或 64 位掩码，除非使用 **--signames** 选项。（别名 **sig\_catch**、**sigcatch**）。 **cgname** **CGNAME** 显示进程所属的控制组的名称。 **cgroup** **CGROUP** 显示进程所属的控制组。 **cgroupns** **CGROUPNS** 用来描述进程所属命名空间的唯一 inode 编号。请参阅 [*namespaces*(7)](/man/os/procps/namespaces.7)。 **class** **CLS** 进程的调度类。（别名 **policy**、**cls**）。字段的可能值为： +9n - 未报告 TS SCHED\_OTHER FF SCHED\_FIFO RR SCHED\_RR B SCHED\_BATCH ISO SCHED\_ISO IDL SCHED\_IDLE DLN SCHED\_DEADLINE ? 未知值 **cls** **CLS** 进程的调度类。（别名 **policy**、**cls**）。字段的可能值为： +9n - 未报告 TS SCHED\_OTHER FF SCHED\_FIFO RR SCHED\_RR B SCHED\_BATCH ISO SCHED\_ISO IDL SCHED\_IDLE DLN SCHED\_DEADLINE ? 未知值 **cmd** **CMD** 请参阅 **args**。（别名 **args**、**command**）。 **comm** **COMMAND** 命令名称（仅包含可执行文件名称）。此列中的输出可能包含空格。（别名 **ucmd**、**ucomm**）。另请参见 **args** 格式关键字、**-f** 选项和 **c** 选项。 当被指定于末尾时，该列将扩展到显示区域的边缘。如果 **ps** 无法确定显示宽度，例如当输出被重定向（通过管道发送）到文件或另一个命令时，输出宽度是未定义的（可能是 80，无限制，由 **TERM** 变量确定，等等）。在这种情况下，可以使用 **COLUMNS** 环境变量或 **--cols** 选项来精确指定宽度。 **w** 或  **-w** 选项也可用于调整宽度。 **command** **COMMAND** 请参阅 **args**。（别名 **args**、**command**）。 **cp** **CP** 按毫（千分之一）显示的 CPU 使用率。（参见 **%cpu**）。 **CPU** **CPU** 参见 **psr**。（别名 **cpuid**、**lastcpu**、**psr**）。 **cpuid** **CPUID** 参见 **psr**。（别名 **cpu**、**lastcpu**、**psr**）。 **cputime** **TIME** 累计 CPU 时间，"\[DD-]hh:mm:ss" 格式。（别名 **time**）。 **cputimes** **TIME** 累计 CPU 时间，以秒为单位（别名 **times**)。 **cuc** **%CUC** 进程的 CPU 利用率，包括已死亡的子进程，使用扩展的 "##.###" 格式。（另请参见 **%cpu**、**c**、**cp**、**cuu**、**pcpu**）。 **cuu** **%CUU** 进程的 CPU 利用率，使用扩展的 "##.###" 格式。（另请参见 **%cpu**、**c**、**cp**、**cuc**、**pcpu**）。 **docker** **DOCKER** 正在运行任务的 docker 容器的 id 的缩写。如果进程未在容器内运行，则会显示短横线 ("-")。 **drs** **DRS** 数据驻留集大小，被进程 *保留* 的私有内存数量。也叫做 DATA。此类内存可能尚未映射到 **rss**，但将始终包含在 **vsz** 数量中。 **egid** **EGID** 进程的有效组 ID 编号（十进制整数）。（别名 **gid**）。 **egroup** **EGROUP** 进程的有效组 ID。如果可以获得文本组 ID（组名）并且字段宽度允许，则将表示为文本组 ID，否则将表示为十进制数字。（别名 **group**）。 **eip** **EIP** 指令指针 (instruction pointer)。从内核 4.9.xx 开始，除非任务正在退出或被核心转储，否则此字段将被清零。 **esp** **ESP** 栈指针。从内核 4.9.xx 开始，除非任务正在退出或被核心转储，否则此字段将被清零。 **etime** **ELAPSED** 自进程启动以来经过的时间，格式为 \[\[DD-]hh:]mm:ss。 **etimes** **ELAPSED** 自进程启动以来经过的时间，以秒计。 **environ** **ENVIRON** 进程的环境变量。 **euid** **EUID** 有效用户 ID（别名 **uid**）。 **euser** **EUSER** 有效用户名称。如果可以获得文本用户 ID（用户名）并且字段宽度允许，则将表示为文本用户 ID，否则将表示为十进制数字。可使用 **n** 选项强制使用十进制表示形式。（别名 **uname**、**user**）。 **exe** **EXE** 可执行文件的路径。如果无法通过 **cmd**、**comm** 或 **args** 格式选项打印路径，则它非常有用。 **f** **F** 与进程相关的标志。请参阅 **进程标志** 一节。（别名 **flag**、**flags**）。 **fds** **FDS** 打开的文件描述符的总数。 **fgid** **FGID** 文件系统访问组 ID。（别名 **fsgid**）。 **fgroup** **FGROUP** 文件系统访问组 ID。如果可以获得文本组 ID（组名）并且字段宽度允许，则将表示为文本组 ID，否则将表示为十进制数字。（别名 **fsgroup**）。 **flag** **F** 参见 **f**。（别名 **f**、**flags**）。 **flags** **F** 参见 **f**。（别名 **f**、**flag**）。 **fname** **COMMAND** 进程可执行文件的基本名称的前 8 个字节。此列中的输出可能包含空格。 **fuid** **FUID** 文件系统访问用户 ID。（别名 **fsuid**）。 **fuser** **FUSER** 文件系统访问用户 ID。如果可以获得文本用户 ID（用户名）并且字段宽度允许，则将表示为文本用户 ID，否则将表示为十进制数字。 **gid** **GID** 参见 **egid**。（别名 **egid**）。 **group** **GROUP** 参见 **egroup**。（别名 **egroup**）。 **htprv** **HTPRV** 基于 hugetlbfs 页面的虚拟内存的数量。这个数量不计入 **rss** 和 **pss** 格式选项内。 **htshr** **HTSHR** 基于 hugetlbfs 页面的共享内存的数量。这个数量不计入 **rss** 和 **pss** 格式选项内。 **ignored** **IGNORED** 被忽略的信号的掩码，参见 [*signal*(7)](/man/os/procps/signal.7)。根据字段的宽度，将显示十六进制格式的 32 或 64 位掩码，除非使用了 **--signames** 选项。（别名 **sig\_ignore**、**sigignore**）。 **ipcns** **IPCNS** 用来描述进程所属命名空间的唯一 inode 编号。请参阅 [*namespaces*(7)](/man/os/procps/namespaces.7)。 **label** **LABEL** 安全标签，最常用于 SELinux 上下文数据。用于高安全性系统上的 *强制访问控制* ("MAC")。 **lastcpu** **C** 参见 **psr**。（别名 **cpu**、**cpuid**、**psr**）。 **lstart** **STARTED** 命令开始的时间。除非通过 **-D** 选项进行更改，否则其格式为 "DDD mmm HH:MM:SS YYY"。 **lsession** **SESSION** 如果启用了 systemd 支持，则显示进程的登录会话标识符。 **luid** **LUID** 显示与进程关联的登录 ID。 **lwp** **LWP** 可分派实体的轻量级进程（线程）ID（别名 **spid**、 **tid**）。请参阅 **tid** 了解更多信息。 **lxc** **LXC** 正在运行任务的 lxc 容器的名称。如果进程未在容器内运行，则会显示短横线 ("-")。 **machine** **MACHINE** 如果已启用 systemd 支持，则对于已分配给 VM 或容器的进程，显示机器名。 **maj\_flt** **MAJFLT** 此进程发生的主要缺页的数量。 **min\_flt** **MINFLT** 此进程发生的次要缺页的数量。 **mntns** **MNTNS** 用来描述进程所属命名空间的唯一 inode 编号。请参阅 [*namespaces*(7)](/man/os/procps/namespaces.7)。 **netns** **NETNS** 用来描述进程所属命名空间的唯一 inode 编号。请参阅 [*namespaces*(7)](/man/os/procps/namespaces.7)。 **ni** **NI** nice 值。范围从 19（对其他进程最友好）到 -20（最不友好），请参阅 [*nice*(1)](/man/os/procps/nice.1)。（别名 **nice**）。 **nice** **NI** 参见 **ni**。（别名 **ni**）。 **nlwp** **NLWP** 进程的 LWP（线程）数量。（别名 **thcount**）。 **numa** **NUMA** 与最近使用的处理器关联的节点。*-1* 表示 NUMA 信息不可用。 **nwchan** **WCHAN** 进程睡眠时位于的内核函数的地址（如果需要内核函数名称，请使用 **wchan**）。 **oom** **OOM** OOM 分数。该值的范围是 0 到 +1000，用于在内存耗尽时选择要终止的任务。 **oomadj** **OOMADJ** OOM 调整因子。该值会被加到当前 OOM 分数中，然后确定内存耗尽时要终止哪个任务。 **ouid** **OWNER** 如果已启用 systemd 支持，则显示进程会话所有者的 Unix 用户标识符。 **pcap** **PCAP** 进程的已允许的能力，以十六进制掩码表示。参见 [*capabilities*(7)](/man/os/procps/capabilities.7)。 **pcaps** **PCAPS** 进程的已允许的能力，以能力名称字符串表示。参见 [*capabilities*(7)](/man/os/procps/capabilities.7)。 **pcpu** **%CPU** 参见 **%cpu**。（别名 **%cpu**）。 **pending** **PENDING** 待处理信号的掩码。参见 [*signal*(7)](/man/os/procps/signal.7)。进程上待处理的信号与单个线程上待处理的信号不同。使用 **m** 选项或 **-m** 选项查看两者。根据字段的宽度，将显示十六进制格式的 32 或 64 位掩码，除非使用了 **--signames** 选项。（别名 **sig**）。 **pgid** **PGID** 进程组 ID，等价于进程组头领的进程 ID。（别名 **pgrp**）。 **pgrp** **PGRP** 参见 **pgid**。（别名 **pgid**）。 **pid** **PID** 一个表示进程 ID 的数字（别名 **tgid**）。 **pidns** **PIDNS** 用来描述进程所属命名空间的唯一 inode 编号。请参阅 [*namespaces*(7)](/man/os/procps/namespaces.7)。 **pmem** **%MEM** 参见 **%mem**。（别名 **%mem**）。 **policy** **POL** 进程的调度类。（别名 **class**、**cls**）。可能的值有： +9n - 未报告 TS SCHED\_OTHER FF SCHED\_FIFO RR SCHED\_RR B SCHED\_BATCH ISO SCHED\_ISO IDL SCHED\_IDLE DLN SCHED\_DEADLINE ? 未知值 **ppid** **PPID** 父进程 ID。 **pri** **PRI** 进程的优先级。数字越大意味着优先级越高。 **psr** **PSR** 最后执行此进程的处理器。(别名 **cpu**、**cpuid**、**lastcpu**) **pss** **PSS** 比例共享大小。等于非交换的物理内存，再加上共享内存（平摊到使用它的所有任务上）。 **rbytes** **RBYTES** 此进程的实际行为导致的从存储层获取的字节数。 **rchars** **RCHARS** 此任务导致从存储中读取的字节数。 **rgid** **RGID** 真实组 ID。 **rgroup** **RGROUP** 真实组名称。如果可以获得文本组 ID（组名）并且字段宽度允许，则将显示文本组 ID，否则将显示十进制数字。 **rops** **ROPS** 读 I/O 操作的数量—也就是 [**read**(2)](/man/os/procps/read.2) 和 [**pread**(2)](/man/os/procps/pread.2) 等系统调用的数量。 **rss** **RSS** 驻留集大小，即任务已使用的非交换物理内存（以 KiB 为单位）。（别名 **rssize**、**rsz**）。 **rssize** **RSS** 参见 **rss**。（别名 **rss**、**rsz**）。 **rsz** **RSZ** 参见 **rss**。（别名 **rss**、**rssize**）。 **rtprio** **RTPRIO** 实时优先级。 **ruid** **RUID** 真实用户 ID。 **ruser** **RUSER** 真实用户 ID。如果可以获得文本用户 ID（用户名）并且字段宽度允许，则将表示为文本用户 ID，否则将表示为十进制数字。 **s** **S** 用最简方式显示进程状态（一个字符）。不同值的含义，请参阅 **进程状态代码** 一节。如果您想显示额外信息，请参阅 **stat**。（别名 **state**）。 **sched** **SCH** 进程的调度策略。策略 SCHED\_OTHER (SCHED\_NORMAL), SCHED\_FIFO, SCHED\_RR, SCHED\_BATCH, SCHED\_ISO, SCHED\_IDLE 和 SCHED\_DEADLINE 分别显示为 0, 1, 2, 3, 4, 5 和 6。 **seat** **SEAT** 如果已启用 systemd 支持，则显示与分配给特定工作场所的所有硬件设备关联的标识符。 **sess** **SESS** 会话 ID，等价于会话头领的进程 ID。（别名 **session**、**sid**）。 **sgi\_p** **P** 当前正在执行该进程的处理器。如果进程当前不处于 "运行中" 或 "可运行" 状态，则显示 "\*"。 **sgid** **SGID** 保存组 ID。（别名 **svgid**）。 **sgroup** **SGROUP** 保存组名称。如果可以获得文本组 ID（组名）并且字段宽度允许，则将显示文本组 ID，否则将显示十进制数字。 **sid** **SID** 参见 **sess**。（别名 **sess**、**session**）。 **sig** **PENDING** 参见 **pending**。（别名 **pending**、**sig\_pend**）。 **sigcatch** **CAUGHT** 参见 **caught**。（别名 **caught**、**sig\_catch**）。 **sigignore** **IGNORED** 参见 **ignored**。（别名 **ignored**、**sig\_ignore**）。 **sigmask** **BLOCKED** 参见 **blocked**。（别名 **blocked**、**sig\_block**）。 **size** **SIZE** 假设进程弄脏所有可写页面然后被换出，所需要的大致的交换空间量。这个数字非常粗略！ **slice** **SLICE** 如果已启用 systemd 支持，则显示进程所属的切片单元 (slice unit)。 **spid** **SPID** 参见 **lwp**。（别名 **lwp**、**tid**）。 **stackp** **STACKP** 进程的栈的底部（起始位置）的地址。 **start** **STARTED** 命令开始的时间。如果该进程是在不到 24 小时前启动的，则输出格式为 "HH:MM:SS"，否则为 "  Mmm dd"（其中 Mmm 是三个字母的月份名称）。另请参见 **bsdstart**、**start**、**start\_time** 和 **stime**。 **start\_time** **START** 进程开始的时间或日期。如果进程不是在调用 **ps** 的同一年启动，则仅显示年份，如果不是在同一天启动，则显示 "MmmDD"，否则显示 "HH:MM"。另请参见 **bsdstart**、**start**、**lstart** 和 **stime**。 **stat** **STAT** 多个字符的进程状态。请参阅 **进程状态代码** 一节了解不同值的含义。如果您只想显示第一个字符，请参见 **s** 和 **state**。 **state** **S** 参见 **s**。（别名 **s**）。 **stime** **STIME** 参见 **start\_time**。 （别名 **start\_time**）。 **suid** **SUID** 保存用户 ID。（别名 **svuid**）。 **supgid** **SUPGID** 增补组的组 ID（如果有的话）。请参阅 [**getgroups**(2)](/man/os/procps/getgroups.2)。 **supgrp** **SUPGRP** 增补组的组名称（如果有的话）。请参阅 [**getgroups**(2)](/man/os/procps/getgroups.2)。 **suser** **SUSER** 保存用户名。如果可以获得文本用户 ID（用户名）并且字段宽度允许，则将表示为文本用户 ID，否则将表示为十进制数字。（别名 **svuser**）。 **svgid** **SVGID** 参见 **sgid**。（别名 **sgid**）。 **svuid** **SVUID** 参见 **suid**。（别名 **suid**）。 **sz** **SZ** 进程核心映像的大小，以物理页的数量表示。这包括文本、数据和栈的空间。目前不包括设备映射；这在将来可能发生变化。请参阅 **vsz** 和 **rss**。 **tgid** **TGID** 表示任务所属的线程组的数字（别名 **pid**）。它是线程组头领的进程 ID。 **thcount** **THCNT** 参见 **nlwp**。（别名 **nlwp**）。进程拥有的内核线程数。 **tid** **TID** 表示可分派实体的唯一编号（别名 **spid**、**tid**）。该值也可能显示为：进程 ID (pid)；进程组 ID (pgrp)；会话头领的会话 ID (sid)；线程组头领的线程组 ID (tgid)；以及进程组头领的 tty 进程组 ID (tpgid)。 **time** **TIME** 累计CPU 时间，"\[DD-]HH:MM:SS" 格式。（别名 **cputime**）。 **timens** **TIMENS** 用来描述进程所属命名空间的唯一 inode 编号。请参阅 [*namespaces*(7)](/man/os/procps/namespaces.7)。 **times** **TIME** 累计 CPU 时间（以秒为单位）（别名 **cputimes**）。 **tname** **TTY** 控制 tty（终端）。（别名 **tt**、**tty**）。 **tpgid** **TPGID** 进程连接到的 tty（终端）上的前台进程组的 ID，如果进程未连接到 tty，则为 -1。 **trs** **TRS** 文本驻留集大小，用于可执行代码的物理内存量。 **tt** **TT** 控制 tty（终端）。（别名 **tname**、**tty**）。 **tty** **TT** 控制 tty（终端）。（别名 **tname**、**tt**）。 **ucmd** **CMD** 参见 **comm**。（别名 **comm**、**ucomm**）。 **ucomm** **COMMAND** 参见 **comm**。（别名 **comm**、**ucmd**）。 **uid** **UID** 参见 **euid**。（别名 **euid**）。 **uname** **USER** 参见 **euser**。（别名 **euser**、**user**）。 **unit** **UNIT** 如果已启用 systemd 支持，则显示进程所属的单元。 **user** **USER** 参见 **euser**。（别名 **euser**、**uname**）。 **userns** **USERNS** 用来描述进程所属命名空间的唯一 inode 编号。请参阅 [*namespaces*(7)](/man/os/procps/namespaces.7)。 **uss** **USS** 唯一集大小，不与另一个任务共享的非交换物理内存的大小。 **utsns** **UTSNS** 用来描述进程所属命名空间的唯一 inode 编号。请参阅 [*namespaces*(7)](/man/os/procps/namespaces.7)。 **uunit** **UUNIT** 如果已启用 systemd 支持，则显示进程所属的用户单元。 **vsize** **VSZ** 参见 **vsz**。（别名 **vsz**）。 **vsz** **VSZ** 进程的虚拟内存大小，以 KiB（1024 字节）为单位。目前不包括设备映射； 这在将来可能会发生变化。（别名 **vsize**）。 **wbytes** **WBYTES** 此进程导致的发送到存储层的字节数。 **wcbytes** **WCBYTES** 取消的写入字节数。 **wchan** **WCHAN** 进程休眠时位于的内核函数的名称。 **wchars** **WCHARS** 此任务已导致或应导致写入磁盘的字节数。 **wops** **WOPS** 写 I/O 操作的数量—即 [**write**(2)](/man/os/procps/write.2) 和 [**pwrite**(2)](/man/os/procps/pwrite.2) 等系统调用的数量。

# 环境变量

以下环境变量可以影响 **ps**：

[**COLUMNS**](#COLUMNS)

覆盖默认显示宽度。

[**LINES**](#LINES)

覆盖默认显示高度。

[**PS\_PERSONALITY**](#PS_PERSONALITY)

设置为以下值之一：posix、old、linux、bsd、sun、digital...（请参阅下面的 **特色** 一节）。

[**CMD\_ENV**](#CMD_ENV)

设置为以下值之一：posix、old、linux、bsd、sun、digital...（请参阅下面的 **特色** 一节）。

[**I\_WANT\_A\_BROKEN\_PS**](#I_WANT_A_BROKEN_PS)

强制使用过时的命令行解释方式。

[**LC\_TIME**](#LC_TIME)

日期格式。

[**LIBPROC\_HIDE\_KERNEL**](#LIBPROC_HIDE_KERNEL)

将其设置为任意值，以隐藏通常在使用 **-e** 选项时显示的内核线程。这等价于选定 **--ppid 2 -p 2 --deselect**。在 BSD 模式下也可以使用。

[**PS\_COLORS**](#PS_COLORS)

当前不支持。

[**PS\_FORMAT**](#PS_FORMAT)

覆盖默认输出格式。您可以将其设置为 **-o** 选项使用的格式字符串。值 **DefSysV** 和 **DefBSD** 特别有用。

[**POSIXLY\_CORRECT**](#POSIXLY_CORRECT)

不要找借口忽略一些不好的 "特性"。

[**POSIX2**](#POSIX2)

当设置为 "on" 时，等同于 **POSIXLY\_CORRECT**。

[**UNIX95**](#UNIX95)

不要找借口忽略一些不好的 "特性"。

**\_XPG**

取消 **CMD\_ENV**=*irix* 的不标准行为。

一般来说，设置这些变量是糟糕的想法。一个例外是 **CMD\_ENV** 或 **PS\_PERSONALITY**，对于普通系统，可以将其设置为 Linux。如果没有这个设置，**ps** 就会遵循 Unix98 标准中无用和糟糕的部分。

# 特色

390 类似 OS/390 OpenEdition **ps** aix 类似 AIX **ps** bsd 类似 FreeBSD **ps**（非常不标准） compaq 类似 Digital Unix **ps** debian 类似旧的 Debian **ps** digital 类似 Tru64（曾经是 Digital Unix、曾经是 OSF/1）**ps** gnu 类似旧的 Debian **ps** hp 类似 HP-UX **ps** hpux 类似 HP-UX **ps** irix 类似 Irix **ps** linux \*\*\*\** **推荐** \*\*\*\** old 类似原版的 Linux **ps**（非常不标准） os390 类似 OS/390 Open Edition **ps** posix 标准 s390 类似 OS/390 Open Edition **ps** sco 类似 SCO **ps** sgi 类似 Irix **ps** solaris2 类似 Solaris 2+ (SunOS 5) **ps** sunos4 类似 SunOS 4 (Solaris 1) **ps**（非常不标准） svr4 标准 sysv 标准 tru64 类似 Tru64（曾经是 Digital Unix、曾经是 OSF/1）**ps** unix 标准 unix95 标准 unix98 标准

# 错误

字段 **bsdstart** 和 **start** 显示的月份名称缩写仅支持英文。字段 **lstart** 和 **stime** 将使用已配置的区域设置显示月份名称缩写，但由于不同语言的月份缩写和日期名称的长度不同，可能会超出列宽。

# 参见

[**pgrep**(1)](/man/os/procps/pgrep.1), [**pstree**(1)](/man/os/procps/pstree.1), [**top**(1)](/man/os/procps/top.1), [**strftime**(3)](/man/os/procps/strftime.3), [**proc**(5)](/man/os/procps/proc.5), [**capabilities**(7)](/man/os/procps/capabilities.7).

# 标准

此 **ps** 符合以下标准。

•

Single Unix Specification，第 2 版

•

The Open Group Technical Standard Base Specifications，第 6 期

•

IEEE Std 1003.1，2004 版

•

X/Open System Interfaces Extension \[UP XSI]

•

ISO/IEC 9945:2003

# 作者

**ps** 最初由 [Branko Lankester](mailto:lankeste@fwi.uva.nl) 编写。 [Michael K. Johnson](mailto:johnsonm@redhat.com) 对其进行了重大重写，以使用 proc 文件系统，并在此过程中修改了一些东西。 [Michael Shields](mailto:mjshield@nyx.cs.du.edu) 添加了 pid 列表功能。 [Charles Blake](mailto:cblake@bbn.com) 添加了多级排序、dirent 风格的库、设备名称到编号 mmap 数据库、直接在 Syetem.map 上进行的近似二分查找，以及许多代码和文档清理工作。 David Mossberger-Tang 为 psupdate 编写了通用 BFD 支持。 [Albert Cahalan](mailto:albert@users.sf.net) 重写了 ps 以实现对 Unix98 和 BSD 的全面支持，并针对过时的和外来的语法进行了一些不太干净的代码修改。

请将错误报告发送到 [procps@freelists.org](mailto:procps@freelists.org)。 不需要也不建议订阅。

2025-04-23 procps-ng

---

Document: ps(1) from procps 4.0.7-r3 (Chainguard OS)
Source: https://downloads.sourceforge.net/project/procps-ng/Production/procps-ng-4.0.7.tar.xz
