LinuxShell命令ps
【注】具体详解参见 man 手册。
1. 简介
ps
是 Linux 下显示瞬间进程状态的强大命令,并不动态连续显示进程状态(top
命令则是对进程进行实时监控)。
2. 格式
bash
1 | ps [options] |
Linux 系统中使用 ps
命令支持三种不同类型的命令行选项参数:
- Unix 风格参数(参数前使用单破折线)
- BSD 风格参数(参数前不使用破折线)
- GNU 风格长参数(参数前加双破折线)
3. 选项
-
默认情况下(不提供选项参数:
ps
),只显示运行在当前控制台下属于当前用户的进程。 -
在使用 BSD 参数时,
ps
命令会自动改变输出以模仿 BSD 格式。
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 |
进程处于换页状态 |
- 举例
显示控制程序和无终端程序:
bash
1 | ps -Na |
本人终端显示结果如下:
plaintext
1 | PID TTY TIME CMD |
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 排序显示进程信息:
bash
1 | ps k ppid O ppid |
本人终端显示结果如下:
plaintext
1 | PID PPID S TTY TIME COMMAND |
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 排序显示进程信息:
bash
1 | ps --sort ppid --format pid,ppid,tty,cmd |
本人终端显示结果如下:
plaintext
1 | PID PPID TT CMD |
4. 详解
4.1 BSD 风格 O order 参数
- 格式
bash
1 | O[+|-]key1[,[+|-]key2[,...]] |
其中,+
表示顺序,-
表示逆序。
- key 值表
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 逆序输出所有进程信息:
bash
1 | ps -AFl O-p |
本人终端结果如下:
plaintext
1 | F S UID PID PPID C PRI NI ADDR SZ WCHAN RSS PSR STIME TTY TIME CMD |
4.2 AIX 格式描述符
- 格式
bash
1 | [-]o/O format |
其中,format
为格式字符串(类似 printf
的格式,不同格式中间可自选分隔符)。
format
中可选格式列表如下:
格式 | 含义 | 输出列名 |
---|---|---|
%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 占用率,并且自定义分隔符:
bash
1 | ps -eo "%p -%y,%x %c" |
本人终端结果如下:
plaintext
1 | PID -TTY , TIME COMMAND |
4.3 常用标准格式描述符
- 格式
bash
1 | [-]o/O key1[=rename1|:width1][[[,| ][key2[=rename2|:width1]]...] |
其中,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
显示指定字段的进程信息:
bash
1 | ps -o pid,ppid,pgrp,comm |
本人终端显示结果如下:
plaintext
1 | PID PPID PGRP COMMAND |
5. 常用参数组合
5.1 查看系统上运行的所有进程
bash
1 | # Unix 风格 |
5.2 采用层级结构显示系统上运行的所有进程
bash
1 | ps -efH |
5.3 获取线程信息
bash
1 | ps -eLf |
5.4 获取安全信息
bash
1 | ps -eM |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 お前はどこまで見えている!
评论
WalineTwikoo