ps 是 process status 的缩写, 用于列出系统中当前运行的进程快照。
命令风格
ps 命令的选项有长格式和短格式的区别,短选项中可以带中横线、也可以不带中横线。
根据选项长短和是否有横线的情况,ps 命令的选项可以分为以下 3 类
BSD 风格语法,必须不能以中横线开头。例如 U
SYSV 风格语法,必须仅一个中横线开头。例如 -u
GNU 风格语法,必须以两个中横线开头。例如 --user
BSD 和 SYSV 风格由于命令简短使用频率较多,也是大众风格。
不同风格的命令可以混用,但不建议这么做!
例如 ps -el en 就是 BSD 和 SYSV 风格的混用,Linux ps 会将命令解析为 ps -e -l e n
选项
在 ps 命令中,同一个字母的不同大小写对应的含义是不一样的。
SYSV 风格的选项有 -A 到 -Z 和 -a 到 -z ,共 52 个
BSD 风格的选项有 A 到 Z 和 a 到 z ,共 52 个
这两种风格加到一起一个 104 个,当然,并不是所有的选项都在使用,在这 104 个命令选项中,未启用的或曾经使用过现在废弃的命令选项如下
BSD 风格不能使用的选项有20个,分别是 A、B、C、D、E、F、G、I、J、K、P、Q、R、W、Y、b、d、i、y、z、
SYSV 风格不能使用的选项有20个,分别是 -B、-D、-E、-I、-J、-K、-Q、-R、-S、-W、-X、-Y、-b、-h、-i、-k、-r、-v、-x、-z
既然是未启用或已废弃,那么运行带这个选项的 ps 命令应该会报错。试运行下大部分确实如此,不过也有几个例外,这样的例外选项一共有如下 7 个且全都是 SYSV 风格,具体如下
-S、-X、-h、-k、-r、-v、-x
这样一来 SYSV 风格真正不能使用的选项就有13个,分别是
-B、-D、-E、-I、-J、-K、-Q、-R、-W、-Y、-b、-i、-z
剩下 BSD 风格 的 32 个选项和 SYSV 风格 的 39 个选项,构成了 linux ps 命令的庞大命令选项体系
展示的数据项
我们输入不同的命令时,ps 展示的数据项也不一样,比如下面 2 个命令
ps aux 输出了 PID、%CPU、%MEM、RSS、TIME 等数据项
ps -ef 输出了UID、PID、PPID、C、CMD 等数据项
首先一个问题就是,ps 命令一共有多少数据项可以输出。答案是 168 个,如图。
其次的一个问题就是,是什么决定了 ps aux 命令输出结果中恰恰包含 USER、PID、%CPU、%MEM、VSZ、RSS、TTY、STAT、START、TIME 和 COMMAND 这 11 个数据项呢。
原因是 ps 命令中有一些选项用来对数据字段进行固定组合。
其中 aux 中的 u 选项就固定包含了以上 11 个数据项,并且他们的显示顺序也已经固化在代码中。
Linux ps 命令中,这种选项一共有 15 个。其中 6 个选项用途比较广泛,其余 9 个选项都主要适合在查询某一种问题时使用。
常用数据项含义
字段
含义
UID
用户ID
USER
用户
PID
进程ID
PPID
父进程ID
C、%CPU、CP
进程占用的CPU百分比或千分比
%MEM
进程占用内存的百分比
VSZ
进程申请的虚拟内存量(KB)并不反应占用的物理内存的大小
RSS
进程占用的物理内存大小(KB)
S、STATE、STAT
进程的状态,R运行 S中断 D不可中断 Z僵死 T停止
CMD、COMMAND
命令的名称和参数
TID
线程ID
NLWP
线程组中的线程个数
PGID
进程组ID
SID
回话ID
TIME
该进程实际使用CPU运行的时间
STIME
进程启动的时间
TTY
该进程在哪个终端上运行,若与终端无关,则显示?