PS(1) 通用命令手册 PS(1)
名称
ps – 进程状态
大纲
ps [-AaCcEefhjlMmrSTvwXx] [-O fmt | -o fmt] [-G gid[,gid...]]
[-g grp[,grp...]] [-u uid[,uid...]] [-p pid[,pid...]]
[-t tty[,tty...]] [-U user[,user...]]
ps [-L]
描述
`ps` 工具显示一个标题行,后跟若干行,每行包含有关您拥有控制终端的所有进程的信息.
可以通过任意组合使用 `-a`、`-G`、`-g`、`-p`、`-T`、`-t`、`-U` 和 `-u` 选项来选择不同的进程集进行显示.如果同时指定了多个此类选项,则 `ps` 将选择至少匹配其中一个选项的所有进程.
对于已选中显示的进程,`ps` 通常每进程显示一行.`-M` 选项可能导致某些进程输出多行(每线程一行).默认情况下,所有这些输出行首先按控制终端排序,然后按进程 ID 排序.`-m`、`-r` 和 `-v` 选项将改变排序顺序.如果指定了多个排序选项,则选定进程将按最后指定的排序选项排序.
对于已选中显示的进程,显示的信息基于一组关键字(参见 `-L`、`-O` 和 `-o` 选项)进行选择.默认输出格式包括每个进程的进程 ID、控制终端、CPU 时间(包括用户时间和系统时间)、状态以及关联的命令.
选项如下:
-A 显示有关其他用户进程的信息,包括没有控制终端的进程.
-a 显示有关其他用户进程以及您自己的进程的信息.除非同时指定 `-x` 选项,否则这将跳过任何没有控制终端的进程.
-C 通过使用忽略"驻留”时间的"原始”CPU 计算来更改 CPU 百分比的计算方式(通常没有效果).
-c 将"命令”列输出更改为仅包含可执行文件名称,而不是完整命令行.
-d 类似 `-A`,但排除会话首进程.
-E 同时显示环境变量.这不会反映进程启动后环境变量的更改.
-e 与 `-A` 相同.
-f 显示 uid、pid、父 pid、近期 CPU 使用率、进程启动时间、控制 tty、已使用的 CPU 时间以及关联的命令.如果同时使用 `-u` 选项,则显示用户名而不是数字 uid.当在 `-f` 后使用 `-o` 或 `-O` 添加显示内容时,命令字段的截断不像其他格式那样严重.
-G 显示使用指定的真实组 ID 运行的进程的信息.
-g 显示具有指定进程组首进程的进程的信息.
-h 根据需要重复信息标题,以保证每页信息都有一个标题.
-j 打印与以下关键字关联的信息:user、pid、ppid、pgid、sess、jobc、state、tt、time 和 command.
-L 列出可用于 `-O` 和 `-o` 选项的关键字集.
-l 显示与以下关键字关联的信息:uid、pid、ppid、flags、cpu、pri、nice、vsz=SZ、rss、wchan、state=S、paddr=ADDR、tty、time 和 command=CMD.
-M 打印每个任务对应的线程.
-m 按内存使用量排序,而不是按控制终端和进程 ID 的组合排序.
-O 在默认信息显示中,在进程 ID 之后添加由空格或逗号分隔的关键字列表关联的信息.关键字可以附加等号('=’)和一个字符串.这将使打印的标题使用指定的字符串而不是标准标题.
-o 显示与指定空格或逗号分隔的关键字列表关联的信息.多个关键字也可以以多个 `-o` 选项的形式给出.关键字可以附加等号('=’)和一个字符串.这将使打印的标题使用指定的字符串而不是标准标题.如果所有关键字的标题文本均为空,则不写入标题行.
-p 显示与指定进程 ID 匹配的进程的信息.
-r 按当前 CPU 使用率排序,而不是按控制终端和进程 ID 的组合排序.
-S 通过将所有已退出的子进程的时间累加到其父进程来更改进程时间的计算方式.
-T 显示附加到与标准输入关联的设备上的进程的信息.
-t 显示附加到指定终端设备的进程的信息.
-U 显示属于指定真实用户 ID 的进程.
-u 显示属于指定用户名的进程.
-v 显示与以下关键字关联的信息:pid、state、time、sl、re、pagein、vsz、rss、lim、tsiz、%cpu、%mem 和 command.`-v` 选项隐含 `-m` 选项.
-w 使用 132 列显示信息,而不是默认的窗口大小.如果多次指定 `-w` 选项,`ps` 将使用尽可能多的列,而不考虑窗口大小.当输出不是到终端时,始终使用无限制的列数.
-X 当显示由其他选项匹配的进程时,跳过任何没有控制终端的进程.
-x 当显示由其他选项匹配的进程时,包括没有控制终端的进程.这与 `-X` 选项相反.如果在同一命令中同时指定了 `-X` 和 `-x`,则 `ps` 将使用最后指定的那个.
下面给出了可用关键字的完整列表.其中一些关键字进一步说明如下:
%cpu 进程的 CPU 利用率;这是对前一分钟(实际)时间的衰减平均值.由于计算此值的时间基准不同(某些进程可能非常年轻),所有 %cpu 字段的总和可能超过 100%.
%mem 此进程使用的实际内存百分比.
flags 与进程关联的标志,参见包含文件 `<sys/proc.h>`:
P_ADVLOCK 0x00001 进程可能持有 POSIX
咨询锁
P_CONTROLT 0x00002 具有控制终端
P_LP64 0x00004 进程为 LP64
P_NOCLDSTOP 0x00008 子进程停止时不产生 SIGCHLD
P_PPWAIT 0x00010 父进程正在等待子进程
exec/exit
P_PROFIL 0x00020 已开始性能分析
P_SELECT 0x00040 正在选择;唤醒/等待
危险
P_CONTINUED 0x00080 进程曾停止并
继续
P_SUGID 0x00100 自上次 exec 后拥有设置 ID
权限
P_SYSTEM 0x00200 系统进程:无信号、统计或
交换
P_TIMEOUT 0x00400 睡眠期间超时
P_TRACED 0x00800 正在跟踪的被调试进程
P_WAITED 0x01000 调试进程已等待
子进程
P_WEXIT 0x02000 正在退出
P_EXEC 0x04000 进程调用了 exec
P_OWEUPC 0x08000 在下一次异步系统陷阱
时欠进程一个 addupc() 调用
P_WAITING 0x40000 进程正在进行 wait()
P_KDEBUG 0x80000 为此进程启用了
内核调试跟踪
lim 通过调用 `setrlimit(2)` 指定的内存使用软限制.
lstart 命令启动的确切时间,使用 `strftime(3)` 中描述的 '%c’ 格式.
nice 进程调度增量(参见 `setpriority(2)`).
rss 进程的常驻内存大小(以 1024 字节为单位).
start 命令启动的时间.如果命令启动时间小于 24 小时,则启动时间使用 `strftime(3)` 中描述的 "%l:ps.1p” 格式显示.如果命令启动时间小于 7 天,则启动时间使用 "%a6.15p” 格式显示.否则,启动时间使用 "%e%b%y” 格式显示.
state 状态由一串字符表示,例如 "RWNA”.第一个字符表示进程的运行状态:
I 表示空闲进程(睡眠时间超过约 20 秒).
R 表示可运行进程.
S 表示睡眠时间少于约 20 秒的进程.
T 表示已停止进程.
U 表示不可中断等待的进程.
Z 表示死进程("僵尸”).
第一个字符之后的附加字符(如果有)表示额外的状态信息:
+ 进程在其控制终端的前台进程组中.
< 进程具有提升的 CPU 调度优先级.
> 进程已指定内存需求的软限制,并且当前超过该限制;
此类进程(必然)不会被换出.
A 进程已请求随机页面置换(例如,`vadvise(2)` 中的
VA_ANOM,如垃圾回收中的 lisp(1)).
E 进程正在尝试退出.
L 进程已锁定内存中的页面(例如,用于原始 I/O).
N 进程具有降低的 CPU 调度优先级(参见 `setpriority(2)`).
S 进程已请求 FIFO 页面置换(`vadvise(2)` 中的 VA_SEQL,
例如,使用虚拟内存顺序访问大量数据的大型图像处理程序).
s 进程是会话首进程.
V 进程在 `vfork(2)` 期间被挂起.
W 进程被换出.
X 进程正在被跟踪或调试.
tt 控制终端路径名的缩写(如果有).缩写由 /dev/tty 之后的三个字母组成,或者对于控制台为 "con”.如果进程无法再访问该控制终端(即已被吊销),则后面会跟一个 '-’.
wchan 进程等待的事件(系统中的地址).以数字打印时,地址的初始部分会被修剪掉,结果以十六进制打印,例如 0x80324000 打印为 324000.
使用 `command` 关键字打印时,已退出且父进程尚未等待的进程(即僵尸)会显示为 "<defunct>”,而在尝试退出时阻塞的进程会显示为 "<exiting>”.如果无法定位参数(通常是因为尚未设置,如系统进程和/或内核线程的情况),命令名称会打印在方括号内.进程可以使用 `setproctitle(3)` 更改显示的参数.否则,`ps` 会通过检查内存或交换区域来对进程创建时给定的文件名和参数进行有根据的猜测.这种方法本身有一定不可靠性,并且进程有权销毁这些信息.不过,可以信赖 ucomm(记帐)关键字.如果参数不可用或与 ucomm 关键字不一致,则 ucomm 关键字的值会附加到括号中的参数后.
关键字
以下是可用关键字及其含义的完整列表.其中一些有别名(同义词关键字).
%cpu CPU 使用率百分比(别名 pcpu)
%mem 内存使用率百分比(别名 pmem)
acflag 记帐标志(别名 acflg)
args 命令和参数
comm 命令
command 命令和参数
cpu 短期 CPU 使用因子(用于调度)
etime 已运行时间
flags 进程标志,十六进制(别名 f)
gid 进程组 ID(别名 group)
inblk 读取的总块数(别名 inblock)
jobc 作业控制计数
ktrace 跟踪标志
ktracep 跟踪 vnode
lim 内存使用限制
logname 启动会话的用户的登录名
lstart 启动时间
majflt 总页错误数
minflt 总页回收数
msgrcv 接收的总消息数(管道/套接字读取)
msgsnd 发送的总消息数(管道/套接字写入)
nice nice 值(别名 ni)
nivcsw 总非自愿上下文切换
nsigs 总信号数(别名 nsignals)
nswap 总换入/换出
nvcsw 总自愿上下文切换
nwchan 等待通道(地址)
oublk 写入的总块数(别名 oublock)
p_ru 资源使用情况(仅对僵尸进程有效)
paddr 交换地址
pagein 页调入(同 majflt)
pgid 进程组编号
pid 进程 ID
ppid 父进程 ID
pri 调度优先级
prsna 角色
re 核心驻留时间(秒;127 表示无穷大)
rgid 真实组 ID
rss 常驻集大小
ruid 真实用户 ID
ruser 用户名(来自 ruid)
sess 会话 ID
sig 待处理信号(别名 pending)
sigmask 阻塞信号(别名 blocked)
sl 睡眠时间(秒;127 表示无穷大)
start 启动时间
state 符号进程状态(别名 stat)
svgid 来自 setgid 可执行文件的已保存 gid
svuid 来自 setuid 可执行文件的已保存 UID
tdev 控制终端设备号
time 累计 CPU 时间,用户 + 系统(别名 cputime)
tpgid 控制终端进程组 ID
tsess 控制终端会话 ID
tsiz 文本大小(KB)
tt 控制终端名称(两个字母缩写)
tty 控制终端的完整名称
ucomm 用于记帐的名称
uid 有效用户 ID
upr 从系统调用返回时的调度优先级(别名 usrpri)
user 用户名(来自 UID)
utime 用户 CPU 时间(别名 putime)
vsz 虚拟大小(KB)(别名 vsize)
wchan 等待通道(符号名称)
wq 工作队列线程总数
wqb 阻塞的工作队列线程数
wqr 运行的工作队列线程数
wql 工作队列限制状态(C = 受限线程限制,T = 总线程限制)
xstat 退出或停止状态(仅对已停止或僵尸进程有效)
环境
以下环境变量影响 `ps` 的执行:
COLUMNS 如果设置,指定用户偏好的输出宽度(列数).默认情况下,`ps` 尝试自动确定终端宽度.
文件
/dev 特殊文件和设备名称
/var/run/dev.db /dev 名称数据库
/var/db/kvm_kernel.db 系统名称列表数据库
传统描述
在传统模式下,`ps` 的功能如上所述,但有以下差异:
-e 同时显示环境变量.同 `-E`.
-g 为兼容性而忽略.不接受参数.
-l 显示与以下关键字关联的信息:uid、pid、ppid、cpu、pri、nice、vsz、rss、wchan、state、tt、time 和 command.
-u 显示与以下关键字关联的信息:user、pid、%cpu、%mem、vsz、rss、tt、state、start、time 和 command.`-u` 选项隐含 `-r` 选项.
最大的变化在于 `-u` 选项的解释,现在它显示属于指定用户名(们)的进程.因此,"ps -aux” 将失败(除非您想了解用户 "x”).但为了方便起见,"ps aux” 仍然像在 Tiger 中一样工作.
有关传统模式的更多信息,请参见 `compat(5)`.
参见
kill(1), w(1), kvm(3), strftime(3), sysctl(8)
标准
`ps` 工具支持单一 UNIX 规范第 3 版("SUSv3”)标准.
历史
`ps` 命令出现在 Version 4 AT&T UNIX 中.
错误
由于 `ps` 的运行速度不能超过系统,并且像任何其他调度进程一样运行,它显示的信息永远不可能完全精确.
`ps` 工具不能正确显示包含多字节字符的参数列表.
macOS 15.7 2005 年 3 月 20 日 macOS 15.7