1.命令作用
报告当前进程的概览情况(report a snapshot of the current processes);此版本ps支持多种选项:
- UNIX 选项可以进行分组,并且必须以连字符开头
- BSD 选项也可以进行分组,但不能与连字符一起使用
- GNU 长选项以两个连字符开头
不同类型的选项可以自由组合,但可能会出现冲突;
注意ps -aux与ps aux是不同的;由POSIX和UNIX标准规定导致:
- 如果存在 x 用户,ps -aux打印 x 用户的所有进程,同时打印出 -a 选项的所有进程
- 如果 x 用户不存在,ps -aux命令可能会解释为ps aux,并打印出警告信息
2.命令语法
Usage: ps [options]
3.语法格式
| 特性 | **POSIX 标准风格(UNIX GUN)** | BSD 风格 |
|---|---|---|
| 选项前缀 | 单连字符 -(如 -a) |
无连字符(如 a) |
| 组合方式 | 单字母选项需分开写(-a -b) |
可合并书写(ab 等效a b) |
| 长选项 | 支持双连字符长选项(--help) |
通常不支持长选项 |
| 典型命令 | ps -ef |
ps aux |
4.参数详解
Basic options:
- -A, -e,所有进程(all processes)
- -a,显示所有终端关联的所有用户进程,不包括会话领导者(如-bash进程自身)和无终端的后台守护进程(如sshd)
- a,显示所有终端关联的所有用户进程,包含会话领导者(如-bash进程)和无终端的后台守护进程(如sshd),且额外显示状态列STAT
- R(Running),进程正在运行或在运行队列中等待的CPU
- S(Interruptible),可中断睡眠(等待事件完成,如I/ 响应、信号唤醒)
- D(Uninterruptible),不可中断睡眠(通常因I/O阻塞,如磁盘读写),不响应任何信号(包括 kill -9)
- T(Stopped),进程被暂停,如通过Ctrl+Z或收到SIGSTOP信号)
- Z(Zombie),僵尸进程(进程已终止,但父进程未回收资源)
- X(Dead),进程完全死亡(极少出现)
- 附加修饰符s(会话领导者)、l(多线程)、+(前台进程组)
- -d,显示除会话领导者以外的所有进程
- -N, --deselect,否定选择;如 ps -e -N --tty pts/0 (显示排除终端pts/0关联的所有进程;如 ps -N -u root (显示非root用户的所有进程);如 ps -N -U 1000 (排除UID为1000的进程)
- r,仅显示处于运行状态的进程;即仅显示STAT状态为R(Running)的进程;排除S(Sleeping)、Z(Zombie)等非活跃进程
- T,当前终端上的所有进程
- x,显示所有与当前用户终端关联的进程,包括会话领导者、后台守护进程、无终端进程
Selection by list(指定多个选项时,可逗号或空格分隔,形如-p 123 4567和-u root,nobody):
- -C <command>,显示指定命令名称的相关进程,如 ps -fC postmaster
- -G, --Group <GID>,正真的用户组ID和名称
- -g, --group <group>,会话或者有效的组名称
- -p, p, --pid <PID>,指定进程ID显示进程;如-p 123 4567
- --ppid <PID>,指定父进程ID显示进程
- -q, q, --quick-pid <PID>,指定进程ID显示进程(快速模式)
- -s, --sid <session>,指定会话ID显示进程
- -t, t, --tty <tty>,指定总端名称显示进程
- -u, U, --user <UID>,有效的用户ID和名称(执行进程的权限用户);如-u root,nobody
- -U, --User <UID>,正真的用户ID和名称(发起进程的实际用户)
Output formats:
- -F,额外全格式
- -f,全格式,包含命令列
- f, --forest,以ASCII图形格式显示进程树
- -H,显示进程层次结构
- -j,作业格式(jobs format)
- j,BSD作业控制格式(BSD job control format)
- -l,长格式
- l,BSD长格式
- -M, Z,添加安全数据(用于 SELinux)
- -O <format>,预先设置好默认列
- O <format>,与-O一样,但具有BSD特性
- -o, o, --format <format>,用户自定义格式(user-defined format)
- s,信号格式(signal format)
- u,用户导向格式(user-oriented format)
- v,虚拟内存格式(virtual memory format)
- X,注册格式(register format)
- -y,不显示标志,显示RSS与地址(与-l一起使用)
- --context,显示安全上下文(适用于 SELinux)
- --headers,重复标题行,每页一行
- --no-headers,完全不要打印标题行(页眉)
- --cols, --columns, --width <num>,设定屏宽
- --rows, --lines <num>,设置屏幕高度,与--headers一起使用可以查看其效果
Show threads:
- H,显示STAT和完成COMMAND名称(as if they were processes)
- -L,可能包含LWP和NLWP列(possibly with LWP and NLWP columns)
- -m, m,进程之后(after processes)
- -T,可能带有SPID列(possibly with SPID column)
Miscellaneous options:
- -c,使用-l选项显示调度类信息
- c,显示真实命令名称
- e,显示执行命令后的环境状态
- k, --sort,指定排序顺序为:[+|-]key[,[+|-]key[,...]]
- L,显示格式说明符
- n,显示数字uid和wchan
- S, --cumulative,包括一些死子进程数据
- -y,不显示标志,显示RSS(仅带-l)
- -V, V, --version,显示版本信息并退出
- -w, w,不限制输出宽度
- --help <simple|list|output|threads|misc|all>,显示帮助并退出
5.常用用例
5.1.输出信息解释
**说明:**以下输出字段包含了常见的一些输出字段,主要是ps -ef 及 ps aux输出的字段内容
- USER,用户名称
- UID,用户ID
- PID,进程ID
- PPID,PID的父进程ID
- C,进程CPU使用百分比
- %CPU,进程当前消耗的CPU资源百分比
- %MEM,进程使用的物理内存占系统总内存的百分比
- STIME,进程启动时间(格式为HH:MM或日期<Aug08>,短时间进程可能显示为?)
- TTY,关联的终端设备;?表示无终端,如守护进程
- VSZ,进程申请的虚拟内存总量(包括共享库和未使用的预留内存)
- RSS,进程实际占用的物理内存(不含共享库)
- CMD,进程执行的命令(简单名称)
- COMMAND,进程执行的完整命令
- START,进程启动时间(格式为HH:MM或日期<Aug08>)
- TIME,进程累计占用CPU的时间,格式是HH:MM:SS(非进程实际运行时长)
- STAT:
- R,正在运行或可运行(在运行队列)
- S,可中断休眠(等一个时间来完成)
- D,不可中断休眠(通常为 I/O 操作)
- Z,僵尸进程
- T,因作业控制信号而停止
- X,已杀死(应该永远不会看到)
- I,(大写i)空闲内核线程
- t,在跟踪期间被调试器停止
- W,分页(内核2.6.x版本后无效)
- <,高优先级
- N,低优先级
- L,内存有被锁定的页(实时和自定义IO)
- s,是会话领导
- l,(小写L)是多线程的(使用CLONE_THREAD,类似NPTL pthreads)
- +,在前台进程组里
5.2.常用进程查看命令
1.使用标准语法查看系统上的每个进程
ps -e # 打印所有进程信息
ps -ef # 以全格式打印所有进程信息
ps -eF # 以额外全格式打印所有进程信息
ps -ely # 以长格式打印,但不显示标志列(第一列)
2.使用BSD语法查看系统上的每个进程
ps ax # 显示所有终端关联的所有用户进程;显示所有与当前用户终端关联的进程,包括会话领导者、后台守护进程、无终端进程
ps axu # 以上信息以用户导向格式打印出来(输出的列信息不同)
3.打印进程树
ps -ejH # 作业控制格式和层次格式打印所有进程信息
ps axjf # 作业控制格式和层次格式打印所有终端关联的所有用户信息,包括会话领导者、后台守护进程、无终端进程
4.获取有关线程的信息
ps -eLf # 可能包含LWP和NLWP列的全格式打印所有进程信息
ps axms # 进程之后信号格式打印所有终端关联的所有用户信息,包括会话领导者、后台守护进程、无终端进程
5.获取安全信息,label是安全相关的信息
ps -eo euser,ruser,suser,fuser,f,comm,label # 用户自定义输出列名称
ps axZ
ps -eM
6.查看每个以root(真实或有效的用户ID)用户身份运行的进程
ps -U root -u root u
7.查看使用用户定义格式的所有进程
ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
ps -Ao pid,tt,user,fname,tmout,f,wchan
8.只打印syslogd的进程号
ps -C postmaster -o pid=
9.只打印PID 42的名称
ps -q 19804 -o comm=
10.按CPU、MEM排序
ps aux --sort=+pcpu # 按照CPU从小到大(+)排序;与ps aux k +pcpu 相同
ps aux --sort=-pmem # 按照内存从大到小(-)排序;与ps aux k -pmem 相同
11.页眉标题行显示
ps aux --headers # 分页打印页眉标题行,每页打印一行页眉标题,方便阅读
ps aux --no-headers # 不打印首行的页眉标题行
5.3.配合其他命令一起使用
ps aux --sort=+pcpu | tail -n 10 # 打印CPU从小到大排序的最后10行
ps aux --sort=-pmem | head -n 10 # 打印内存从大到小排序的前面10行
ps -ef | grep postgres # 打印postgres相关进程