【注】具体详解参见 man 手册。
1. 简介
ps
是 Linux 下显示瞬间进程状态的强大命令,并不动态连续显示进程状态(top
命令则是对进程进行实时监控)。
2. 格式
Linux 系统中使用 ps
命令支持三种不同类型的命令行选项参数:
Unix 风格参数(参数前使用单破折线)
BSD 风格参数(参数前不使用破折线)
GNU 风格长参数(参数前加双破折线)
3. 选项
3.1 Unix 风格
选项参数
说明
-A
显示所有进程,同 -e
-N
显示与指定参数不符的所有进程(默认显示除当前终端下的程序外所有程序),同 --deselect
-a
显示除控制进程和无终端进程外的所有进程
-d
显示除控制进程外的所有进程
-e
显示所有进程,同 -A
-C cmdlist
显示包含在 cmdlist
列表中的进程
-G grplist
显示组 ID 包含在 grplist
列表中的进程
-U userlist
显示属主用户 ID 包含在 userlist
列表中的进程,同 --User
-g grplist
显示会话或组 ID 在 grplist
列表中的进程(到底是会话 ID 还是有有效组 ID 取决与具体 Linux 发行版)
-p pidlist
显示 PID 在 pidlist
列表中的进程,同 p
和 --pid
-s sesslist
显示会话 ID 在 sesslist
列表中的进程
-t ttylist
显示终端 ID 在 ttylist
列表中的进程,同 t
和 --tty
-u userlist
显示有效用户 ID 在 userlist
列表中的进程,同 U
和 --user
-F
显示更多额外输出(相较于 -f
参数)
-O format
显示默认的输出列以及 format
列表指定的特定列
-M
显示进程的安全信息
-c
显示进程的额外调度信息
-f
显示完整格式的输出
-j
显示任务信息
-l
显示长列表
-o format
仅显示由 format
指定的列,同 o
和 --format
-y
不显示进程标记(process flag,表明进程状态)
-Z
显示安全标签(security context/label)信息
-H
用层级格式(树状格式,表明进程间的父子关系)来显示进程
-n namelist
设定名称列表文件路径(有些 Linux 发行版不支持)
-w
采用宽输出模式,不限宽度显示
-L
显示进程中的线程
-V
显示 ps
命令的版本号
Unix 风格为进程单字符状态码(输出为 S 列)
状态符号
说明
R(TASK_RUNNING)
正在运行或在运行队列中准备执行
S(TASK_INTERRUPTIBLE)
可中断睡眠状态,因等待某事件发生而被挂起
D(TASK_UNINTERRUPTIBEL)
不可中断(不响应异步信号,而不是不响应外部硬件中断)睡眠状态
I
空闲内核线程
T(TASK_STOPPED or TASK_TRACED)
暂停状态或跟踪状态(被作业控制信号暂停)
t
跟踪暂停状态(在跟踪调试过程中被调试器暂停)
Z(EXIT_ZOMBIE)
僵尸进程
X(EXIT_DEAD)
退出状态,进程即将被销毁
W
进程处于换页状态
显示控制程序和无终端程序:
本人终端显示结果如下:
1 2 3 4 5 6 7 PID TTY TIME CMD 1 ? 00:00:02 systemd 2 ? 00:00:00 kthreadd 4 ? 00:00:00 kworker/0:0H 6 ? 00:00:00 mm_percpu_wq 7 ? 00:00:00 ksoftirqd/0 ......
3.2 BSD 风格
选项参数
说明
T
显示跟当前终端关联的所有进程,同不带参数的 t
a
显示跟任意终端关联的所有进程
g
显示所有进程(包括控制进程)
r
仅显示运行中的进程
x
显示当前用户的所有进程,甚至包括未分配任何终端的进程(若和 a
连用则显示系统所有进程)
U userlist
显示属主用户 ID 包含在 userlist
列表中的进程
p pidlist
显示 PID 在 pidlist
列表中的进程
t ttylist
显示终端 ID 在 ttylist
列表中的进程
O format
显示默认的输出列以及 format
列表指定的特定列,同 -O
X
按过去的 Linux i386 寄存器格式显示
Z
将安全信息添加到输出中
j
显示任务信息
l
显示长列表
o format
仅显示由 format
指定的列
s
采用信号格式显示
u
采用基于用户的格式显示
v
采用虚拟内存格式显示
N namelist
设定名称列表文件路径(有些 Linux 发行版不支持)
O order
定义显示信息列的顺序,即指定输出信息排序规则(-O
没有此用法)
S
将数值信息从子进程加到父进程上(比如 CPU 和内存使用情况)
c
显示真实的命令名称(用以启动进程的程序名称)
e
显示命令使用的环境变量
f
用分层格式来显示进程(显示父子进程关系)
h
不显示头信息
k spec
指定用以将输出排序的列,同 --sort
n
用数值显示 WCHAN 和 USER 列
w
采用宽输出模式,不限宽度显示
H
将线程按进程来显示
m
在进程后显示线程
L
列出所有格式指示符(第一列用于 [-]o/O
后的 format
格式,第二列为输出对应显示的列名)
V
显示 ps
命令版本号
BSD 风格为进程多字符状态码(输出为 STAT 列):第一个状态码同 Unix 风格显示进程状态,其余字符进一步说明进程的状态。
状态符号
说明
<
表明该进程运行在高优先级上
N
表明该进程运行在低优先级上
L
表明该进程有页面锁定在内存中
s
表明该进程是控制进程
l
表明该进程是多线程的
+
表明改进程运行在前台
按照父进程 ID 排序显示进程信息:
本人终端显示结果如下:
1 2 3 4 5 6 7 8 9 10 11 12 PID PPID S TTY TIME COMMAND 3088 3080 S pts/0 00:00:00 bash 7869 3080 S pts/1 00:00:00 bash 10317 3080 S pts/2 00:00:00 bash 12429 3080 S pts/4 00:00:00 bash 22354 3080 S pts/6 00:00:00 bash 27861 3080 S pts/3 00:00:00 bash 21532 10317 S pts/2 00:00:00 man 16770 12429 R pts/4 00:00:00 ps 21542 21532 S pts/2 00:00:00 pager 27888 27861 S pts/3 00:00:00 man 27898 27888 S pts/3 00:00:00 pager
3.3 GNU 长参数风格
选项参数
说明
--deselect
显示与指定参数不符的所有进程(默认显示除当前终端下的程序外所有程序),同 -N
--Group grplist
显示组 ID 在 grplist
列表中的进程
--User userlist
显示用户 ID 在 userlist
列表中的进程
--group grplist
显示有效组 ID 在 grplist
列表中的进程
--pid pidlist
显示 PID 在 pidlist
列表中的进程
--ppid pidlist
显示父 PID 在 pidlist
列表中的进程
--sid sidlist
显示会话 ID 在 sidlist
列表中的进程
--tty ttylist
显示终端设备号在 ttylist
列表中的进程
--user userlist
显示有效用户 ID 在 userlist
列表中的进程
--format format
仅显示由 format
指定的列
--context
显示额外的安全信息
--cols/columns n
将屏幕宽度设置为 n
列
--cumulative
包含已停止的子进程的信息
--forest
用层级结构显示出进程和父进程之间的关系
--headers
在每页输出中都显示列的头
--no-headers
不显示列的头
--lines n
将屏幕高度设为 n
行
--rows n
将屏幕高度设为 n
排
--sort spec
指定将输出按哪列排序
--width n
将屏幕宽度设为 n
列
--help
显示帮助信息
--info
显示调试信息
--version
显示 ps
命令的版本号
按照父进程 ID 排序显示进程信息:
1 ps --sort ppid --format pid,ppid,tty ,cmd
本人终端显示结果如下:
1 2 3 PID PPID TT CMD 12429 3080 pts/4 bash 18446 12429 pts/4 ps --sort ppid --format pid,ppid,tty,cmd
4. 详解
4.1 BSD 风格 O order 参数
1 O[+|-]key1[,[+|-]key2[,...]]
其中,+
表示顺序,-
表示逆序。
key
全称
说明
c
cmd
进程启动的程序名称
C
pcpu
CPU 利用率
f
flags
长列表格式中的 F 列
g
pgrp
进程组 ID
G
tpgid
tty进程组ID(为连接到 tty 则为 -1)
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
占用内存大小(KB)
S
share
共享页数量
t
tty
控制终端 tty 设备号
T
start_time
进程启动至今所过时间
U
uid
用户 ID
u
user
用户名
v
vsize
总占用虚拟内存空间大小(KB)
y
priority
内核调度优先级
按照 PID 逆序输出所有进程信息:
本人终端结果如下:
1 2 3 4 5 6 7 F S UID PID PPID C PRI NI ADDR SZ WCHAN RSS PSR STIME TTY TIME CMD 1 S zhangji+ 29974 4619 0 80 0 - 197384 futex_ 100904 3 20:20 ? 0:00 /opt/google/chrom 1 S zhangji+ 29953 4619 0 80 0 - 192882 futex_ 117896 3 20:20 ? 0:00 /opt/google/chrom 1 S zhangji+ 29923 4619 0 80 0 - 180153 futex_ 69972 1 20:20 ? 0:00 /opt/google/chrom 1 S zhangji+ 29885 4619 0 80 0 - 202766 futex_ 112476 2 20:20 ? 0:02 /opt/google/chrom 1 S zhangji+ 29856 4619 0 80 0 - 205781 futex_ 127136 6 20:20 ? 0:01 /opt/google/chrom ......
4.2 AIX 格式描述符
其中,format
为格式字符串(类似 printf
的格式,不同格式中间可自选分隔符)。
格式
含义
输出列名
%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
输出所有进程的 PID、TTY 号、当目前为止进程运行的累计 CPU 时间、CPU 占用率,并且自定义分隔符:
本人终端结果如下:
1 2 3 4 5 6 PID -TTY , TIME COMMAND 1 -? ,00:00:02 systemd 2 -? ,00:00:00 kthreadd 4 -? ,00:00:00 kworker/0:0H 6 -? ,00:00:00 mm_percpu_wq ......
4.3 常用标准格式描述符
1 2 [-]o/O key1[=rename1|:width1][[[,| ][key2[=rename2|:width1]]...] --sort [+|-]key1[,[+|-]key2[,...]]
其中,keyn
为指定格式描述符,renamen
为重命名输出列名,widthn
为指定输出列宽度,+
表示顺序而 -
表示逆序。
格式描述符
列名
说明
user/euser/uname
USER/EUSER
有效用户名
uid/euid
UID/EUID
启动进程的有效用户 ID
pid/tgid
PID/TGID
进程 ID
ppid
PPID
父进程 ID
pgid/pgrp
PGID/PGRP
进程组 ID
c
C
进程生命周期中的 CPU 利用率
%cpu/pcpu
%CPU
CPU 占用率
%mem/pmem
%MEM
内存使用率
start/start_time/stime
进程启动时的系统时间
etime
ELAPSED
进程启动至今经过的时间([DD-]HH:MM:SS
格式输出)
etimes
ELAPSED
进程启动至今经过的时间(秒)
time/cputime
TIME
当目前为止进程运行的累计 CPU 时间([DD-]HH:MM:SS
格式输出)
times/cputimes
TIME
当目前为止进程运行的累计 CPU 时间(秒)
args/cmd/command
CMD/COMMAND
进程启动的程序命令
comm/ucmd/ucomm
COMMAND/CMD
进程启动的可执行文件名
tt/tty
TT
进程启动时的终端设备
f/flag/flags
F
内核分配给进程的系统标记
s/state
S
进程单字符状态符
stat
STAT
进程多字符状态符
pri
PRI
进程优先级(值越大优先级越低)
ni/nice
NI
谦让度,参与决定优先级
size
SIZE
进程换出需要的交换空间大致大小
sz
SZ
进程所占物理页大小
vsz/vsize
VSZ
进程所占虚拟内存大小(KB)
rss/rssize/rsz
RSS/RSZ
进程驻留内存占用空间大小(kB)
wchan
WCHAN
进程休眠的内核函数名称(-
表示进程正在运行,*
表示为多线程进程)
…
…
按照自定义格式 pid,ppid,pgrp,comm
显示指定字段的进程信息:
1 ps -o pid,ppid,pgrp,comm
本人终端显示结果如下:
1 2 3 4 PID PPID PGRP COMMAND 6776 13466 6776 bash 6858 2307 6851 python3 9412 6776 9412 ps
5. 常用参数组合
5.1 查看系统上运行的所有进程
1 2 3 4 5 6 ps -ef ps -eF ps ax ps axu
5.2 采用层级结构显示系统上运行的所有进程
1 2 3 ps -efH ps -ef f ps axf
5.3 获取线程信息
5.4 获取安全信息