用途

显示进程的当前状态。该文档描述了标准 AIX ps 命令,以及 ps 的 System V 版本命令。

语法

X/Open 标准

ps [ -A ] [ -M ] [ -N ] [ -Z ] [ -a ] [ -d ] [ -e ] [ -f ] [ -k] [ -l ] [ -F format] [ -o Format ] [ -c Clist ] [ -G Glist ] [ -g Glist ] [ -m ] [ -n NameList ] [ -p Plist ] [ -P ] [ -t Tlist ] [ -U Ulist ] [ -u Ulist ] [ -T pid ] [ -L pidlist ] [ -X ] [ -@ [ WparName ] ]

Berkeley 标准

ps [ a ] [ c ] [ e ] [ ew ] [ eww ] [ g ] [ n ] [ w ] [ x ] [ l | s | u | v ] [ t tty ] [ X ] [ ProcessNumber ]

描述

ps 命令将活动进程的当前状态和(如果指定了 -m 标志)有关的内核线程写到标准输出中。注意当 -m 标志使用额外的行显示与进程相关的线程时,您必须使用 -o 标志连同 THREAD 字段说明符来显示额外的与线程相关的列。
不使用任何标志时,ps 命令会显示关于当前终端的信息。-f-ol-lsuv 标志仅确定为该进程提供了多少信息;它们不确定列出哪些进程。lsuv 标志互斥。
使用 -o 标志时,ps 命令检查内存或调页区域并确定进程创建时的命令名和参数是什么。如果 ps 命令不能找到该信息,存储在内核中的命令名显示在方括号中。
COLUMNS 环境变量覆盖系统选定的水平屏幕大小。
接受参数列表(-o-G-g-p-t-U-u 标志)的命令行标志的限制为 128 项。例如,-u Ulist 标志能指定不超过 128 个用户。
取决于 ps 命令使用的标志,列标题将显示在标准输出中显示的信息的上方。标题定义在以下列表中(使这些标题显示的标志在圆括号中显示):
ADDR
通常情况下,(-ll 标志)包含进程栈的段号;如果为内核进程,那么为预处理数据区的地址。
BND
-o THREAD 标志)绑定内核线程的处理器(如果有)的逻辑处理器号。对一个进程来说,如果它的线程全都绑定到同一处理器上,那么显示该字段。
C
-fl-l 标志)每次系统时钟周期和发现线程或进程需要运行时增加进程或线程的 CPU 利用率。调度程序通过每秒除 2 将该值衰减。对于 sched_other 策略,CPU 利用率用于确定进程调度优先级。大值表示一个 CPU 密集处理且造成更低的进程优先级而小值表示一个 I/O 密集处理且造成更高的优先级。
CMD
-f-ll 标志)包含命令名。在 -f 标志下,ps 试图确定当前的命令名和参数,此二者可能由进程异步更改。然后显示这些内容。如果失败,那么将在方括号中写入在没有选项 -f 时将会显示的命令名。
COMMAND
suv)包含命令名。使用 -f 标志显示完整命令名和它的参数。
F 字段表
标志 十六进制值 定义
SLOAD 0x00000001 表示该进程正在核心内存中操作。
SNOSWAP 0x00000002 表示该进程不能被交换出去。
STRC 0x00000008 表示该进程正被跟踪。
SWTED 0x00000010 表示进程在跟踪时停止。
SFWTED 0x00000020 表示在被跟踪时,调用 fork 子例程后进程停止。
SEWTED 0x00000040 表示在被跟踪时,调用 exec 子例程后进程停止。
SLWTED 0x00000080 表示在被跟踪时,调用 loadunload 子例程后进程停止。
SFIXPRI 0x00000100 表示该进程有固定的优先级,忽略 pcpu 字段描述符。
SKPROC 0x00000200 表示一个内核进程。
SOMASK 0x00000400 表示收到信号后恢复旧掩码。
SWAKEONSIG 0x00000800 表示该信号将异常终止 sleep 子例程。内容必须PCATCH 标志的内容相同。PCATCHSWAKEONSIG 的内容必须大于 PMASK 的内容。
SUSER 0x00001000 表示该进程处在用户方式中。
SLKDONE 0x00002000 表示该进程已完成锁定。
STRACING 0x00004000 表示该进程是个调试进程。
SMPTRACE 0x00008000 表示多进程调试。
SEXIT 0x00010000 表示正退出进程。
SSEL 0x00020000 表示处理器正在选择:唤醒/等待危险。
SORPHANPGRP 0x00040000 表示一个孤立进程组。
SNOCNTLPROC 0x00080000 表示会话导带放弃了终端控制。
SPPNOCLDSTOP 0x00100000 表示当子进程停止时,SIGHLD 信号送到父进程。
SEXECED 0x00200000 表示已运行该进程。
SJOBSESS 0x00400000 表示在当前会话中使用作业控制。
SJOBOFF 0x00800000 表示该进程不受作业控制的影响。
PSIGDELIVERY 0x01000000 表示该进程被程序检查处理程序使用。
SRMSHM 0x02000000 表示调用 exit 子例程过程中,该进程除去了共享内存。
SSLOTFREE 0x04000000 表示进程槽空闲。
SNOMSG 0x08000000 表示没有其他 uprintf 子例程消息。
WPAR
-@ 标志)包含工作负载分区名称。在 -@ 标志下,ps 命令显示进程正在其中运行的工作负载分区的名称。使用 wparname 参数指定 -@ 标志以显示进程信息。
DPGSZ
Z 标志)进程数据页的大小。
F
-ll 标志)与进程和线程相关的部分更重要 F 字段标志(十六进制和添加的)显示在下表中。
F 字段表
标志 十六进制值 定义
SLOAD 0x00000001 表示该进程正在核心内存中操作。
SNOSWAP 0x00000002 表示该进程不能被交换出去。
STRC 0x00000008 表示该进程正被跟踪。
SKPROC 0x00000200 表示一个内核进程。
SEXIT 0x00010000 表示正退出进程。
SLPDATA 0x00020000 表示该进程使用了大页面。
SEXECED 0x00200000 表示已运行该进程。
SEXECING 0x01000000 表示该进程正在执行(执行一个可执行程序)。
SPSEARLYALLOC 0x04000000 表示先前分配了此进程的调页空间。
TKTHREAD 0x00001000 表示该线程是一个内核线程。
注:
可通过分别查询 /usr/include/sys/proc.h/usr/include/sys/thread.h 文件中的 p_flagst_flags 字段查看所有进程和线程标识的定义。
LIM
v 标志)通过调用 setrlimit 子例程指定内存使用的软限制。如果不指定限制则显示为 xx。如果将该限制设为系统限制,(没限制),显示值 UNLIM
NI
-ll 标志)为 sched other 策略计算优先级中使用的细调值。
PID
(所有标志)进程的进程标识。
PGIN
v 标志)处理未装入核心的页面引用产生的磁盘 I/O 的数目。
PPID
-fl-l 标志)父进程的进程标识。
PRI
-ll 标志)进程或内核线程的优先级;数字越大优先级越低。
PROJECT
-P 标志)分配到进程的项目名称。
RSS
v 标志)进程的实际内存(驻留集)大小(单位是 1KB)。
S
-ll 标志)进程或内核线程的状态:
对于进程:
O
不存在
A
活动
W
已交换
I
空闲(等待启动)
Z
已取消
T
已停止
对于内核线程:
O
不存在
R
正在运行
S
正在休眠
W
已交换
Z
已取消
T
已停止
SC
-o THREAD 标志)进程或内核线程的暂挂数。对进程来说,暂挂数定义为内核线程暂挂数的总和。
SCH
-o THREAD 标志)内核线程的调度策略。使用 012 分别显示策略 sched_othersched_fifosched_rr
SIZE
v 标志)进程数据节的虚拟大小(单位是 1 KB)。
SPGSZ
Z 标志)进程栈页的大小。
SSIZ
s 标志)内核堆栈的大小。对于多线程进程,该值总为 0(零)。
STAT
suv 标志)包含进程状态:
0
不存在
A
活动
I
中间的
Z
已取消
T
已停止
K
可用的内核进程
STIME
-fu 标志)进程的启动时间。 LANG 环境变量控制该字段的外观。
SUBPROJ
-P 标志)分配到进程的子项目标识。
SZ
-ll 标志)该进程核心映像的大小单位是 1KB。
THCNT
-o thcount 标志)进程拥有的内核线程数。
TID
-o THREAD 标志)内核线程的线程标识。
TIME
(所有标志)进程的运行时间总和。如果运行时间达到 100 分钟,以 mm:ssmmmm:ss 格式显示时间,这与使用 -o time 标志时的显示格式不同。
TPGSZ
Z 标志)进程文本页的大小。
TRS
v 标志)文本的驻留集(实际内存)大小。
TSIZ
v 标志)文本(共享程序)映像的大小。
TTY
(所有标志)进程的控制终端:
-
进程与终端无关。
?
未知。
Number
TTY 数目。例如,条目 2 表示 TTY2。
UID
-f-ll 标志)进程所有者的用户标识。登录名在 -f 标志下显示。
USER
u 标志)进程所有者的登录名。
WCHAN
-l 标志)进程或内核线程为之等待或休眠的事件。对于内核线程,如果内核线程正在运行,该字段为空。对于进程,如果只有一个内核线程正在休眠,等待通道定义为该休眠内核线程的等待通道;否则显示一个星号。
WCHAN
l 标志)进程等待的事件(系统中的一个地址)。选择一个符号对地址分类,除非请求数字输出。
%CPU
uv 标志)进程启动后,该进程使用 CPU 的时间百分比。该值通过将进程使用 CPU 的时间除以进程所用时间计算。在多处理器环境中,因为同一进程中的几个线程可以同时在不同的 CPU 上运行,该值要进一步除以可用 CPU 数。(由于计算该数据基于的时间不同,所有 %CPU 字段的总和可能超过 100%。)
%MEM
uv 标志)进程使用的实际内存的百分比。%MEM 往往会夸大与其他进程共享程序文本的进程的成本。但运行一个程序的多个副本和所有实例共享该程序文本的一个副本时不会计算时间。在该程序的每个实例中计算文本节的大小。这意味着如果运行一个程序的多个副本,所有进程的总 %MEM 值可以超过 100%。
进程已退出且有一个父进程,而父进程没有等待该进程,将该进程标志为 <defunct>。已阻塞且正在尝试退出的进程标志为 <exiting>ps 命令试图确定内存或交换区创建进程时给定的文件名和参数。
注:
  1. ps 命令运行时可以更改进程。为死进程显示的部分数据是不相关的。
  2. ps 程序检查内存来检索文件名和创建进程时使用的参数。但是,进程可以破坏信息,使检索文件名和参数的方法不可靠。

标志

下列标志前面有一个 -(负号):
-A 将关于所有进程的信息写到标准输出。
-a 将关于所有进程(除了会话导带和与终端无关的进程)的信息写到标准输出。
-c Clist 仅显示关于 Clist 变量列出的指定到工作负荷管理类的进程的信息。Clist 变量或者是一个由逗号分开的类名列表或者是一个由双引号(" ")引起来的且之间用逗号或一个或多个空格或两者分隔的类名列表。
-d 将关于所有进程(除会话导带)的信息写到标准输出。
-e 将除内核进程以外所有进程的信息写到标准输出。
-F Format -o Format 相同
-f 生成一个完整列表。
-G Glist 仅将关于进程的信息写到标准输出,这些进程处于为 Glist 变量列出的有效组中。Glist 变量是一个使用逗号分隔的有效组标识列表,或是一个由双引号(" ")引起的、且使用逗号或一个或多个空格分隔开的有效组标识的列表。
-g Glist 仅将关于进程的信息写到标准输出,这些进程在为 Glist 变量列出的进程组中。Glist 变量或者是一个由逗号分隔的进程组标识列表或者是一个由双引号(" ")引起来的且之间用逗号或一个或多个空格或两者分隔的进程组标识的列表。
-k 列出内核进程。
-l 生成一长列表。另见 l 标志。
-L pidlist pidlist 变量中生成每个 pid(已经将 pid 传递给它)后代的列表。pidlist 变量是逗号分隔的进程标识的列表。以其在进程表中显示的顺序显示所有给定 pid 的后代列表。
-M 列出所有 64 位的进程。
-m 列出内核线程和进程。进程的输出行后面跟着一额外输出行,它关于每个内核线程。该标志不显示特定于线程的字段(bndscountschedthcounttid),除非指定了适当的 -o Format 标志。
-N 不聚集线程统计信息。使用该标志后,ps 报告那些可以通过不遍历进程的线程链来获得那些统计信息。
-n NameList 指定备用系统名称列表文件来替换缺省系统名称列表文件。因为直接提供信息给内核,操作系统不使用 -n 标志。
-o Format Format 变量指定的格式显示信息。可以为 Format 变量指定多个字段说明符。Format 变量或者是一个由逗号分隔的字段说明符列表或是一个由“”(双引号)引起来的之间用逗号或一个或多个空格或两者分隔的说明符列表。
每个字段说明符有一个缺省头。通过附加一个 =(等号),后跟用户定义的头文本,可以覆盖缺省头。写字段的顺序采用命令行中列格式指定的方式。字段宽度由系统指定,它至少为缺省的或用户定义的头文本宽度。如果头文本为空,(例如如果指定 -o user=),字段宽度至少为缺省头文本宽度。如果所有头字段都为空,不写头行。
系统标识下列字段说明符:
args
说明正在执行的完整命令名。包含所有命令行参数,尽管可能发生截断。该字段的缺省头为 COMMAND
bnd
表示进程或内核线程绑定到哪个(如果有)处理器。该字段的缺省头为 BND
class
表示为进程或线程分配的工作负载管理类。该字段的缺省头为 CLASS
comm
表示正在执行的命令的短名称。不包含命令行参数。该字段的缺省头为 COMMAND
cpu
确定进程调度优先级。每次系统时钟周期和发现进程或线程运行时增加进程或线程的 CPU 利用率。调度程序通过每秒除 2 将该值衰减。对于 sched_other 策略,大值表示一个 CPU 密集处理且造成更低的进程优先级而小值表示一个 I/O 密集处理且造成更高的优先级。
dpgsz
表示进程数据页的大小。
etime
表示进程启动后所用的时间。所用时间以下列格式显示:
[[ dd-]hh:]mm:ss
其中 dd 指定天数,hh 指定小时数,mm 指定分钟数及 ss 指定秒数。该字段的缺省头为 ELAPSED
group
表示该进程的有效组标识。显示文本组标识。如果不能得到文本组标识,使用十进制表示。该字段的缺省头为 GROUP
nice
表示进程细调值的十进制值。该字段的缺省头为 NI
-o Format(续)
pcpu
表示使用的 CPU 时间占可用 CPU 时间的比例,以百分比表示。该字段的缺省头为 %CPU
pgid
表示进程组标识的十进制值。该字段的缺省头为 PGID
pid
表示进程标识的十进制值。该字段的缺省头为 PID
ppid
表示父进程标识的十进制值。该字段的缺省头为 PPID
rgroup
表示该进程的实际组标识。显示文本组标识。如果不能得到文本组标识,使用十进制表示。该字段的缺省头为 RGROUP
ruser
表示该进程的实际用户标识。显示文本用户标识。如果不能得到文本用户标识,使用十进制表示。该字段的缺省头为 RUSER
scount
表示内核线程的暂挂数。该字段的缺省头为 SC
sched
表示内核线程的调度策略。该字段的缺省头为 SCH
spgsz
表示进程堆栈页的大小。
tag
表示工作负荷管理器应用程序标记。该字段的缺省头为 TAG。该标记为一个字符串,它不超过 30 个字符长且由 ps 显示时可能会截断。对于不设置标记的进程,该字段显示为一个 -(连字符)。
tcpu
总 CPU 时间。指示单个进程的总累积 CPU 时间。该字段的缺省头为 TCPU
tctime
总连接时间。指示登录会话可会活动时的时间总量。这仅在会话引导进程中才有意义。该字段的缺省头为 TCTIME
tdiskio
总磁盘 I/O。指示单个进程的 I/O 的总累积块数。该字段的缺省头为 TDISKIO
tpgsz
表示进程文本页的大小。
vmsize
表示 WLM 虚拟内存限制。使用此限制时,将显示一个新的标题 VMSIZVMSIZ 显示进程使用的虚拟内存。此值以 1 MB 为单位显示。
-o Format(续)
thcount
表示该进程拥有的内核线程数。该字段的缺省头为 THCNT
THREAD
表示下列字段:
  • 用户名(uname 字段)
  • 进程的进程及父进程标识(pidppid 字段)
  • 线程的内核线程标识(tid 字段)
  • 进程或内核线程的状态(S 字段)
  • 进程或内核线程的 CPU 利用率(C 字段)
  • 进程或内核线程的优先级(PRI 字段)
  • 进程或内核线程的暂挂数(scount 字段)
  • 进程或内核线程的等待通道( WCHAN 字段)
  • 进程或内核线程的标志(F 字段)
  • 进程的控制终端(tty 字段)
  • 进程或内核线程绑定到的 CPU (bnd 字段)
  • 正在由进程执行的命令(comm 字段)
使用 -o THREAD 标志实际上不显示线程,除非也指定 -m 标志。
tid
表示内核线程的线程标识。该字段的缺省头为 TID
time
表示进程启动后的累计 CPU 时间。时间以下列格式显示:
[ dd-]hh:mm:ss
其中 dd 指定天数,hh 指定小时数,mm 指定分钟数及 ss 指定秒数。该字段的缺省头为 TIME
tty
表示该进程的控制终端名。该字段的缺省头为 TT
user
表示该进程的有效用户标识。显示文本用户标识。如果不能得到文本用户标识,使用十进制表示。该字段的缺省头为 USER
vsz
使用十进制整数表示虚拟内存中进程的大小,以千字节为单位。该字段的缺省头为 VSZ
-o Format(续)
否则,通过 Format 变量,可以显示指定格式的多个字段,包括字段描述符。如果在 Format 变量中使用字段描述符,它必须包含在双引号(" ")内。下表显示了字段描述符如何对应字段说明符:
字段            字段            缺省值
描述符          说明符          头
%a              args            COMMAND
%c              comm            COMMAND
%t              etime           ELAPSED
%D              dpgsz           DPGSZ
%G              group           GROUP
%n              nice            NI
%C              pcpu            %CPU
%r              pgid            PGID
%p              pid             PID
%P              ppid            PPID
%g              rgroup          RGROUP
%u              ruser           RUSER
%S              spgsz           SPGSZ
%x              time            TIME
%T              tpgsz           TPGSZ gd
%y              tty             TTY
%U              user            USER
%z              vsz             VSZ
每个字段说明符有一个缺省头。通过附加一个等号(=),后跟用户定义的头文本,可以覆盖缺省头。写字段的顺序采用命令行中列格式指定的方式。字段宽度由系统指定,它至少为缺省的或用户定义的头文本宽度。如果头文本为空(例如,指定了 -o user=),那么字段的宽度至少为与缺省头文本等宽。如果所有头字段都为空,不写头行。
-o Format(续)
以下是缺省头和各种字段说明符之间的映射。对于“缺省头”列中的每个条目,通过为“字段说明符”的对应条目附加一个等号(=),后跟用户定义的头文本,可以覆盖对应的缺省头。
缺省头                   字段说明符
ARGS                          "args"
COMM                          "comm"
COMM                          "command"
COMM                          "ucomm"
F_ETIME                       "etime"
GROUP                         "group"
GROUP                         "gname"
GID                           "gid"
NICE                          "nice"
PRI                           "pri"
NICE                          "ni"
PCPU                          "pcpu"
PMEM                          "pmem"
PGID                          "pgid"
PID                           "pid"
PPID                          "ppid"
RGROUP                        "rgroup"
RGROUP                        "rgname"
RGID                          "rgid"
RUSER                         "ruser"
RUSER                         "runame"
RUID                          "ruid"
TIME                          "time"
TIME                          "cputime"
TTY                           "tty"
TTY                           "tt"
TTY                           "tname"
TTY                           "longtname"
USER                          "user"
USER                          "uname"
UID                           "uid"
LOGNAME                       "logname"
STIME                         "start"
VSZ                           "vsz"
VSZ                           "vsize"
RSS                           "rssize"
FLAG                          "flag"
STATUS                        "status"
CP                            "cp"
PAGEIN                        "pagein"
WCHAN                         "wchan"
NWCHAN                        "nwchan"
ST                            "st"
TID                           "tid"
SCOUNT                        "scount"
BIND                          "bnd"
SCHED                         "sched"
THCOUNT                        "thcount"
TAG                           "tag"
CLASS                         "class"
TCPU                          "tcpu"
TDISKIO                       "tdiskio"
TCTIME                        "tctime"
MACLAB                        "mac"
-p Plist 仅显示关于 Plist 变量指定的进程号的进程的信息。Plist 变量或者是一个由逗号分隔的进程标志号列表或者是一个由双引号(" ")引起来的且之间用逗号或一个或多个空格或两者分隔的进程标识号列表。
-P 显示项目的项目名称、项目源和子项目标识。如果设置了进程的杆位,项目名称前面将带有星号(*)字符。Project origin 字段指定当前已装入的项目存储库(LOCAL 或 LDAP)。
-t Tlist 仅显示与 Tlist 变量中列示的控制 tty 相关的进程的信息。Tlist 变量是用逗号分隔的 tty 标识列表或括在双引号(" ")中的 tty 标识列表(这些标识之间用逗号和/或一个或多个空格分隔)。
-T pid 以使用 ASCII 技术的树格式显示位于给定 pid 上的进程层次结构。此标志可以与 -f-F-o-l 标志一起使用。
-U Ulist 仅显示关于 Ulist 变量指定的用户标识号或登录名的进程的信息。Ulist 变量或者是一个由逗号分隔的用户标识列表或者是一个由双引号(" ")引起来的且之间用逗号或一个或多个空格或两者分隔的用户标识列表。在该列表中,ps 命令显示数字用户标识除非使用 -f 标志;然后命令显示登录名。此标志与 -u Ulist 标志等同。另见 u 标志。
-u Ulist 此标志与 -U Ulist 标志等同。
-X 显示每个用户/组名称的所有可用字符,而不用截断前 8 个字符以后的字符。
-Z 显示进程的页大小设置。
DPGSZ
表示进程数据页的大小。
SPGSZ
表示进程堆栈页的大小。
TPGSZ
表示进程文本页的大小。
-@ [ WparName ] 显示与 WparName 工作负载分区关联的进程信息。如果没有指定 WparName 参数,将显示所有工作负载分区的进程信息。显示所有进程的工作负载分区信息。必须向 ps 命令指定其他标志,以确定要显示的进程信息。

选项

以下选项前没有减号(-):
a 显示所有有终端的进程的信息(通常仅显示用户自己的进程)。
c 显示命令名,它存储在系统内用于记帐,而不显示保留在进程地址空间中的命令参数。
e 显示环境以及传递给命令的参数,最多不超过 80 个字符。
ew e 标志折行显示一额外行。
eww e 标志折行显示必要次。
g 显示所有进程。
l 显示一个长列表,具有 FSUIDPIDPPIDCPRINIADDRSZPSSWCHANTTYTIMECMD 字段。
n 显示数字输出。在长列表中,数字地而不是符号地显示 WCHAN 字段。在用户列表中,USER 字段替换为 UID 字段。
s 显示基本输出格式中每个进程(由系统维护人员使用)的内核栈的大小(SSIZ)。对于多线程进程,该值总为 0(零)。
t tty 显示一些进程,这些进程的控制 tty 是 tty 变量的值,它们应该指定为 ps 命令显示的值;即,对于终端 /dev/tty/00,对于 /dev/lft0lft0,对于 /dev/pts/2pts/2
u 显示面向用户的输出。这包括 USERPID%CPU%MEMSZRSSTTYSTATSTIMETIMECOMMAND 字段。
v 显示 PGINSIZERSSLIMTSIZTRS%CPU%MEM 字段。
w 为输出指定一宽列格式(132 列而不是 80 列)。如果重复,(例如, ww),任意地使用宽输出。此信息用于决定要显示的长命令有多少。
x 显示没有终端的进程除了有一个控制终端的进程。
X 打印完整用户名或组名。名称没有被截断。

退出状态

此命令返回以下退出值:
0 成功完成。
>0 发生了错误。

安全性

RBAC 用户和 Trusted AIX 用户注意:该命令可执行特权限定的操作。只有特权用户才能执行特权限定的操作。有关权限与特权的更多信息,请参阅安全性中的“特权限定的命令数据库”。有关与该命令相关联的特权和权限的列表,请参阅 lssecattr 命令或 getcmdattr 子命令。

示例

  1. 要显示所有进程,请输入:
    ps -e -f
    要显示带有扩展用户名的所有进程,请输入:
    ps -X -e -f
    
  2. 要列出特定用户拥有的进程,请输入:
    ps -f -l -ujim,jane,su
  3. 要列出与 /dev/console/dev/tty1 ttys 相关的进程,请输入:
    ps -t console,tty/1
  4. 要列出与终端无关的进程,请输入:
    ps -t -
  5. 要使用字段描述符显示指定的格式,请输入:
    ps -o ruser,pid,ppid=parent,args
    输出为:
    RUSER   PID     parent  COMMAND
    helene  34      12      ps -o ruser,pid,ppid=parent,args
  6. 要使用字段描述符显示指定的格式,请输入:
    ps -o "< %u > %p %y : %a"
    输出为:
    < RUSER  >      PID     TT :    COMMAND
    < helene >      34      pts/3 : ps -o < %u > %p %y : %a
  7. 要显示关于由当前终端控制的进程和内核线程的信息,请输入:
    ps -lm
    输出类似于:
         F S UID  PID PPID  C PRI NI ADDR  SZ WCHAN   TTY  TIME  CMD
    240003 A  26 8984 7190  1  60 20 2974 312       pts/1  0:00  -ksh
       400 S   -    -    -  1  60  -    -   -           -     -  -
    200005 A  26 9256 8984 15  67 20 18ed 164       pts/1  0:00  ps
         0 R   -    -    - 15  67  -    -   -           -     -  -
  8. 要显示关于所有进程和内核线程的信息,请输入:
    ps -emo THREAD
    输出类似于:
    USER   PID  PPID  TID S  C PRI SC   WCHAN   FLAG   TTY BND  CMD
    jane  1716 19292    - A 10  60  1       * 260801 pts/7   -  biod
       -     -     - 4863 S  0  60  0 599e9d8   8400     -   -  -
       -     -     - 5537 R 10  60  1 5999e18   2420     -   3  -
    luke 19292 18524    - A  0  60  0 586ad84 200001 pts/7   -  -ksh
       -     -     - 7617 S  0  60  0 586ad84    400     -   -  -
    luke 25864 31168    - A 11  65  0       - 200001 pts/7   -  -
       -     -     - 8993 R 11  65  0       -      0     -   -  -
  9. 要列出所有 64 位的进程,请输入:
    ps -M
  10. 要显示进程的项目分配详细信息,请输入:
    ps  -P
  11. 要显示进程的页大小设置,请输入:
    ps -Z
    输出类似于:
              PID    TTY TIME DPGSZ SPGSZ TPGSZ CMD
            41856 pts/15 0:00    4K    4K    4K ps
            84516 pts/15 0:00    4K    4K    4K ksh
    

文件

/usr/bin/ps 包含 ps 命令。
/etc/passwd 指定用户标识信息。
/dev/pty* 指示终端(PTY)名称。
/dev/tty* 指示终端(TTY)名称。

相关信息

kill 命令和 nice 命令。
性能管理中的『使用 ps 命令』

System V ps 命令

语法

/usr/sysv/bin/ps [ -a ] [ -A ] [ -c ] [ -d ] [ -e ] [ -f ] [ -j ] [ -l ] [ -L ] [ -P ] [ -y ] [ -g pgrplist ] [ -o format ] [ -p proclist ] [ -s sidlist ] [ -t termlist ] [ { -u | -U } uidlist ] [ -G grplist ] [ -X ]

描述

ps 命令显示关于活动进程的信息。不使用标志,ps 显示与控制终端相关的进程的信息。输出包含进程标识、终端标识、累计运行时间和命令名。随着标志的变化相应地显示信息。

输出

取决于 ps 命令使用的标志,列标题随着显示的信息变化。标题定义在下列列表中(使这些标题显示的标志在圆括号中显示):
F (-l)
与进程相关的标志(十六进制和添加的)或线程(如果指定了 -L 选项)。与进程和线程相关的部分更重要 F 字段标志(十六进制和添加的)显示在下表中:
F 字段表
标志 十六进制值 定义
SLOAD 0x00000001 表示该进程正在核心内存中操作。
SNOSWAP 0x00000002 表示该进程不能被交换出去。
STRC 0x00000008 表示该进程正被跟踪。
SKPROC 0x00000200 表示一个内核进程。
SEXIT 0x00010000 表示正退出进程。
SEXECED 0x00200000 表示已运行该进程。
SEXECING 0x01000000 表示该进程正在执行(执行一个可执行程序)。
TKTHREAD 0x00001000 表示该线程是一个仅内核线程。
注:
通过分别在 /usr/include/sys/proc.h/usr/include/sys/thread.h 文件中查询 p_flagst_flags 字段,能看到所有进程和线程的定义。
S (-l)
进程或内核线程的状态:
对于进程:
O
不存在
A
活动
W
已交换
I
空闲
Z
已取消
T
已停止
对于内核线程:
O
不存在
R
正在运行
S
正在休眠
W
已交换
Z
已取消
T
已停止
UID (-f,- l)
进程的用户标识号(登录名在 -f 选项下显示)。
PID (all)
进程的进程标识。
PPID (-f,-l)
父进程的进程标识。
CLS (-c)
进程的调度类。仅在使用 -c 标志时显示。
NI (-l)
sched_other 策略计算优先级中使用的进程细调值。
PRI (-c, -l)
进程或内核线程的优先级。数字越大,优先级越低。
ADDR (-l)
通常情况下,包含进程栈的段号;如果为内核进程,那么为预处理数据区的地址。
SZ (-l)
进程的核心映像的页面大小。
WCHAN(-l)
进程或内核线程为之等待或休眠的事件。对于内核线程,如果内核线程正在运行,该字段为空。对于进程,如果只有一个内核线程正在休眠,等待通道定义为该休眠内核线程的等待通道;否则显示一个星号。
STIME (-f,-u)
进程的启动时间。LANG 环境变量控制该字段的外观。
TTY (all)
进程的控制终端:
-
进程与终端无关。
?
未知
TIME (all)
进程的总运行时间。如果运行时间达到 100 分钟,以 mm:ssmmmm:ss 格式显示时间,这与使用 -o time 标志时的显示格式不同。
LTIME (-L)
单个 LWP 的运行时间。
CMD (all)
包含命令名。使用 -f 标志显示完整命令名和它的参数。
LWP (-L)
内核线程的 tid。
NLWP(-Lf)
进程中核心线程的数目。
PSR (-P)
绑定内核线程的处理器(如果有)的逻辑处理器号。对一个进程来说,如果它的线程全都绑定到同一处理器上,那么显示该字段。
RSS (-ly)
进程的实际内存(驻留集)大小(单位是页)。

格式

下表描述了系统标识的字段描述符。可以连同 -o 标志使用这些字段描述符来指定 ps 命令的输出格式。
系统标识的字段描述符为:
addr
通常情况下,表示进程栈的段号;如果为内核进程,那么为预处理数据区的地址。该字段的缺省头为 ADDR
args
说明正在执行的完整命令名。包含所有命令行参数,尽管可能发生截断。该字段的缺省头为 COMMAND
c
每次系统时钟周期和发现进程或线程运行时增加进程或线程的 CPU 利用率。调度程序通过每秒除 2 将该值衰减。对于 sched_other 策略,CPU 利用率用于确定进程调度优先级。大值表示一个 CPU 密集处理且造成更低的进程优先级而小值表示一个 I/O 密集处理且造成更高的优先级。该字段的缺省头为 C
class
表示内核线程的调度策略。策略为 sched_other、sched_fifo 和 sched_rr。该字段的缺省头为 CLS
comm
表示正在执行的命令的短名称。不包含命令行参数。该字段的缺省头为 COMMAND
etime
表示进程启动后所用的时间。所用时间以该格式显示:
[[ dd -] hh: ]mm :ss
其中 dd 指定天数,hh 指定小时数,mm 指定分钟数及 ss 指定秒数。
该字段的缺省头为 ELAPSED
f
与进程相关的标志(十六进制和添加的)。该字段的缺省头为 COMMAND
fname
表示进程的可执行文件的基础名的前 8 个字节。该字段的缺省头为 COMMAND
gid
使用一个十进制整数表示该进程的有效组标识号。该字段的缺省头为 GID。在 -f 选项下打印登录名。
group
表示该进程的有效组标识。显示文本组标识。如果不能得到文本组标识,使用十进制表示。该字段的缺省头为 GROUP
lwp
表示该内核线程的线程标识。该字段的缺省头为 TID
nice
表示进程细调值的十进制值。该字段的缺省头为 NI
nlwp
表示该进程拥有的内核线程数。该字段的缺省头为 THCNT
pcpu
表示使用的 CPU 时间占可用 CPU 时间的比例,以百分比表示。该字段的缺省头为 %CPU
pgid
表示进程组标识的十进制值。该字段的缺省头为 PGID
pid
表示进程标识的十进制值。该字段的缺省头为 PID
pmem
表示进程使用的实际内存的百分比。该字段的缺省头为 %MEM
ppid
表示父进程标识的十进制值。该字段的缺省头为 PPID
pri
表示进程或内核线程的优先级;数字越大优先级越低。该字段的缺省头为 PRI
psr
表示绑定内核线程的处理器(如果有)的逻辑处理器号。该字段的缺省头为 PSR
rgid
使用一个十进制整数表示该进程的实际组标识号。该字段的缺省头为 RGID
rgroup
表示该进程的实际组标识。显示文本组标识。如果不能得到文本组标识,使用十进制表示。该字段的缺省头为 RGROUP
rss
表示该进程的实际内存(驻留集)大小(单位是 1 KB)。该字段的缺省头为 RSS
ruid
使用一个十进制整数表示该进程的实际用户标识号。该字段的缺省头为 RUID
ruser
表示该进程的实际用户标识。显示文本用户标识。如果不能得到文本用户标识,使用十进制表示。该字段的缺省头为 RUSER
s
表示该进程的状态。该字段的缺省头为 S
sid
表示会话导带的进程标识。该字段的缺省头为 SID
stime
表示进程的启动时间。LANG 环境变量控制该字段的外观。该字段的缺省头为 STIME
time
表示进程启动后的累计 CPU 时间。时间显示的格式同 etime 中的格式。该字段的缺省头为 TIME
tty
表示该进程的控制终端名。该字段的缺省头为 TT
uid
使用一个十进制整数表示该进程的有效用户标识号。该字段的缺省头为 UID
user
表示该进程的有效用户标识。显示文本用户标识。如果不能得到文本用户标识,使用十进制表示。该字段的缺省头为 USER
vsz
使用一个十进制整数表示该进程的核心映像,以千字节为单位。该字段的缺省头为 VSZ
wchan
表示该进程或内核线程为之等待或休眠的事件。对于内核线程,如果内核线程正在运行,该字段为空。对于进程,如果只有一个内核线程正在休眠,等待通道定义为该休眠内核线程的等待通道;否则显示一个星号。
该字段的缺省头为 WCHAN

标志

部分标志接受列表作为参数。列表中的项或者可使用逗号分隔或者使用双引号引起来且之间用逗号或空格分隔。 proclistpgrplist 的值必须为数字。
-a 将关于所有进程(除了会话导带和与终端无关的进程)的信息写到标准输出。
-A 将关于所有进程的信息写到标准输出。
-c 以反映调度程序属性的格式显示信息。-c 标志影响 -f-l 标志的输出,描述如下。
-d 将关于所有进程(除会话导带)的信息写到标准输出。
-e 将除内核进程以外所有进程的信息写到标准输出。
-f 生成一个完整列表。
-g pgrplist 仅将关于在由 pgrplist 指定的进程组中的进程的信息写到标准输出。pgrplist 的值必须为数字。
-G grplist 仅将关于由 grplist 指定的进程组中的进程的信息写到标准输出。-G 标志接受组名。
-j 显示会话标识和进程组标识。
-l 生成一长列表。
-L 显示进程中活动线程的状态。
-o format format 变量指定的格式显示信息。可以为 format 变量指定多个字段说明符。可以连同 -o 标志一起使用的字段说明符的描述在 Format 节的上面。
-p proclist 仅显示关于 proclist 指定的进程号的进程的信息。proclist 的值必须为数字。
-P 显示进程的主内核线程绑定到的处理器(如果有)的逻辑处理器号。
-s sidlist 显示会话导带标识由 sidlist 指定的所有线程。
-t termlist 仅显示与 termlist 指定的终端相关的进程的信息。
-u uidlist 仅显示关于 uidlist 指定的用户标识号或登录名的进程的信息。
-U uidlist 仅显示关于 uidlist 指定的用户标识号或登录名的进程的信息。
-X 显示每个用户和组名称的所有可用字符,而不用截断前 8 个字符以后的字符。
-y 当与 -l 选项结合时,改变长列表以便它以千字节显示“RSS”和“SZ”且不显示“F”和“ADDR”字段。

退出状态

此命令返回以下退出值:
0 成功完成。
>0 发生了错误。

安全性

RBAC 用户和 Trusted AIX 用户注意:该命令可执行特权限定的操作。只有特权用户才能执行特权限定的操作。有关权限与特权的更多信息,请参阅安全性中的“特权限定的命令数据库”。有关与该命令相关联的特权和权限的列表,请参阅 lssecattr 命令或 getcmdattr 子命令。

示例

  1. 要显示所有进程,请输入:
    ps -e -f
  2. 要列出用户“guest”拥有的进程,请输入:
    ps -f -l -u guest 
  3. 要列出与 /dev/pts/0/dev/pts/1 终端相关的进程,请输入:
    ps -t pts/0,pts/1
  4. 要列出与终端无关的进程,请输入:
    ps -t -
  5. 要使用字段说明符显示指定的格式,请输入:
    ps -o ruser,pid,ppid,args
  6. 要显示关于进程中所有内核线程的信息,请输入:
    ps -L
  7. 要显示所有进程的会话标识和进程组标识,请输入:
    ps -jA
  8. 要显示调度类和进程的优先级,请输入:
    ps -c -l 
  9. 要显示进程中内核线程的信息及内核线程数,请输入:
    ps -L -f 
  10. 要显示进程或内核线程绑定到的处理器,请输入:
    ps  -P
  11. 要显示给定进程(以下示例中的 inetd)的 ASCII 技术,请输入:
    ps -T 14220
    
    输出将类似于以下内容:
         PID    TTY  TIME CMD
       14220      -  0:00 inetd
       16948      -  0:00    |\--telnetd
       32542  pts/4  0:00    |    \--ksh
       26504      -  0:00    |\--telnetd
       41272  pts/5  0:00    |    \--ksh
       26908  pts/5  0:00    |        \--vi
       28602      -  0:00    |\--telnetd
       24830  pts/0  0:00    |    \--ksh
      676416  pts/0  0:00    |        \--ksh
       29984      -  0:00    |\--telnetd
       38546  pts/6  0:00    |    \--ksh
       32126      -  0:00    |\--telnetd
       11162  pts/7  0:00    |    \--ksh
       34466      -  0:00    |\--rpc.ttdbserver
       35750      -  0:00    |\--telnetd
       23612  pts/3  0:00    |    \--ksh
       36294      -  0:00    |\--telnetd
       38096  pts/8  0:00    |    \--ksh
       39740      -  0:00    |\--telnetd
       42226  pts/9  0:01    |    \--ksh
       40632      -  0:00    |\--telnetd
       40232  pts/2  0:00    |    \--ksh
       32910  pts/2  0:00    |        \--dbx
      987990  pts/2  0:00    |            \--a.out
       40722      -  0:00    |\--telnetd
       16792 pts/10  0:00    |    \--ksh
       37886 pts/10  0:00    |        \--ps
      105716      -  0:00     \--telnetd
       29508  pts/1  0:00         \--ksh
       39478  pts/1  0:00             \--ksh
       38392  pts/1  0:00                 \--vi
    
  12. 要显示关于位于给定 pid 的所有进程的信息,请输入:
    ps -fL 14220
    
    输出将类似于以下内容:
      UID   PID  PPID   C    STIME    TTY  TIME CMD
    root 14220  8676   0   Apr 07      -  0:00 /usr/sbin/inetd
    root 16948 14220   0   Apr 06      -  0:00 telnetd -a
    root 23612 35750   0   Apr 10  pts/3  0:00 -ksh
    root 24830 28602   1 18:30:56  pts/0  0:00 -ksh
    root 28602 14220   0 18:30:55      -  0:00 telnetd -a
    root 32542 16948   0   Apr 06  pts/4  0:00 -ksh
    root 34466 14220   0   Apr 10      -  0:00 rpc.ttdbserver 100083 1
    root 35750 14220   0   Apr 10      -  0:00 telnetd -a
    root 40228 24830   8 18:36:01  pts/0  0:00 ps -fL 14220
    
  13. 要显示带有扩展用户名的所有进程,请输入:
    ps -X -e -f

文件

/usr/sysv/bin/ps 包含 System V R4 ps 命令。
/etc/passwd 包含用户标识信息。
/dev/pty* 指示终端(PTY)名称。
/dev/tty* 指示终端(TTY)名称。