ps命令大概是最常用的linux命令之一了,但是却是最容易忽略的命令。
PS中有许多已知的误解
PS命令有三种风格:
UNIX 风格,选项可以组合在一起,并且选项前必须有“-”连字符。最常见。
BSD 风格,选项可以组合在一起,但是选项前不能有“-”连字符。
GNU 风格的长选项,选项前有两个“-”连字符。
最常见的认知大概是 ps -aux 了
a,u,x 是BSD风格的参数,前面不加 “-” ,在CentOS 6 系统中,如果观察仔细,输出中第一行会有一行提示:“Warning: bad syntax, perhaps a bogus ‘-‘? See /usr/share/doc/procps-3.2.8/FAQ”
但在CentOS 7 中,这行提示被取消了,大概是放弃治疗了吧。
另外一个就是ps命令的 “-o”参数,这个参数可以指定我们需要的任何格式的输出,将重点记录
BSD风格参数
a | 显示所有有终端的进程的信息(通常仅显示用户自己的进程)。 |
c | 显示命令名,它存储在系统内用于记帐,而不显示保留在进程地址空间中的命令参数。 |
e | 显示环境以及传递给命令的参数,最多不超过 80 个字符。 |
ew | 从 e 标志折行显示一额外行。 |
eww | 从 e 标志折行显示必要次。 |
g | 显示所有进程。 |
l | 显示一个长列表,具有 F、S、UID、PID、PPID、C、PRI、NI、ADDR、SZ、PSS、WCHAN、TTY、TIME 和 CMD 字段。 |
n | 显示数字输出。在长列表中,数字地而不是符号地打印 WCHAN 字段。在用户列表中,USER字段替换为 UID 字段。 |
s | 显示基本输出格式中每个进程(由系统维护人员使用)的内核栈的大小(SSIZ)。对于多线程进程,该值总为 0(零)。 |
t Tty | 显示进程,它的控制 tty 为 Tty 变量的值,它应该指定为 ps 命令打印;也就是,0 对于终端 /dev/tty/0、lft0 对于 /dev/lft0 及 pts/2 对于 /dev/pts/2。 |
u | 显示面向用户的输出。这包括 USER、PID、%CPU、%MEM、SZ、RSS、TTY、STAT、STIME、TIME和 COMMAND 字段。 |
v | 显示 PGIN、SIZE、RSS、LIM、TSIZ、TRS、%CPU 和 %MEM 字段。 |
w | 为输出指定一宽列格式(132 列而不是 80 列)。如果重复,(例如, ww),任意地使用宽输出。此信息用于决定要打印的长命令有多少。 |
x | 显示没有终端的进程除了有一个控制终端的进程。 |
UNIX风格参数
-A 将关于所有进程的信息写到标准输出。 -a 将关于所有进程(除了会话导带和与终端无关的进程)的信息写到标准输出。 -c Clist 仅显示关于 Clist 变量列出的指定到工作负荷管理类的进程的信息。 Clist 变量或者是一个由逗号分开的类名列表或者是一个由双引号(" ")引起来的且之间用逗号或一个或多个空格或两者分隔的类名列表。 -d 将关于所有进程(除会话导带)的信息写到标准输出。 -e 将除内核进程以外所有进程的信息写到标准输出。 -F Format 与 -o Format 相同 -f 生成一个完整列表。 -G Glist 仅将关于进程的信息写到标准输出,这些进程在为 Glist 变量列出的进程组中。 Glist 变量或者是一个由逗号分隔的进程组标识符列表或者是一个由双引号(" ")引起来的且之间用逗号或一个或多个空格或两者分隔的进程组标识符的列表。该标志与 -g Glist 标志等价。 -g Glist 该标志与 -G Glist 标志等价。 -k 列出内核进程。 -l 生成一长列表。另见 l 标志。 -m 列出内核线程和进程。进程的输出行后面跟着一额外输出行,它关于每个内核线程。该标志不显示特定于线程的字段(bnd、scount、sched、 thcount 和 tid),除非指定了适当的 -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 密集处理且造成更高的优先级。 etime 表示进程启动后所用的时间。所用时间以下列格式显示:[[ dd-]hh:]mm:ss 其中 dd 指定天数,hh 指定小时数,mm 指定分钟数及 ss 指定秒数。该字段的缺省头为 ELAPSED。 group 表示该进程的有效组标识。显示文本组标识。如果不能得到文本组标识,使用十进制表示。该字段的缺省头为 GROUP。 nice 表示进程细调值的十进制值。该字段的缺省头为 NI。 pcpu 表示使用的 CPU 时间占可用 CPU 时间的比例,以百分比表示。该字段的缺省头为 %CPU。 pgid 表示进程组标识的十进制值。该字段的缺省头为 PGID。 pid 表示进程标识的十进制值。该字段的缺省头为 PID。 ppid 表示父进程标识的十进制值。该字段的缺省头为 PPID。 rgroup 表示该进程的实际组标识。显示文本组标识。如果不能得到文本组标识,使用十进制表示。该字段的缺省头为 RGROUP。 ruser 表示该进程的实际用户标识。显示文本用户标识。如果不能得到文本用户标识,使用十进制表示。该字段的缺省头为 RUSER。 scount 表示内核线程的暂挂数。该字段的缺省头为 SC。 sched 表示内核线程的调度策略。该字段的缺省头为 SCH。 tag 表示工作负荷管理器应用程序标记。该字段的缺省头为 TAG。该标记为一个字符串,它不超过 30 个字符长且由 ps 显示时可能会截断。对于不设置标记的进程,该字段显示为一个 -(连字符)。 tcpu 总 CPU 时间。指示单个进程的总累积 CPU 时间。该字段的缺省头为 TCPU。 tctime 总连接时间。指示登录会话可会活动时的时间总量。这仅在会话引导进程中才有意义。该字段的缺省头为 TCTIME。 tdiskio 总磁盘 I/O。指示单个进程的 I/O 的总累积块数。该字段的缺省头为 TDISKIO。 thcount 表示该进程拥有的内核线程数。该字段的缺省头为 THCNT。 THREAD 表示下列字段: 用户名(uname 字段) 进程的进程及父进程标识(pid 和 ppid 字段) 线程的内核线程标识(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。 总结: 字段 字段 缺省值 描述符 说明符 头 %a args COMMAND %c comm COMMAND %t etime ELAPSED %G group GROUP %n nice NI %C pcpu %CPU %r pgid PGID %p pid PID %P ppid PPID %g rgroup RGROUP %u ruser RUSER %x time TIME %y tty TTY %U user USER %z vsz VSZ