每次用ps命令总感觉该命令强大且复杂,后来仔细看了它的manpage,发现其实该命令很方便使用,参数挺有规律的。
1:语法
ps [options]
2:简介
ps命令可以接受如下几种形式的选项
(1)UNIX选项,选项前必须加-
(2)BSD选项,选项前千万不要加-
(3)GNU长选项,选项前加--
ps的选项包括一下几种类型:
(1)简单的进程选择:例如 -e选择全部的进程, ax也可以选择全部的进程
(2)用list方式来选择进程:例如-C cmdname1,cmdname2 指定进程的名字进行选择,-p pid1,pid2...按指定的进程号进行选择
(3)输出格式控制:即选择何种格式输出,如选项l为BSD long format -L
(4)输出格式修饰符:如-H可以将输出按进程树的形式输出。
(5)线程输出的选项:如-L显示线程。
另外的就是根据自定义输出格式相关的东西
如ps -Lo etime,pid,lwp,psr -C sample,该命令可以查看sample的各个线程的线程号lwp,以及正在运行的cpu号psr。
其中-o后的参数控制输出格式,-L输出线程,-C 输出进程名为sample的进程。
3:简单的进程选择
- BSD options
- a 选出有terminal的进程
- T 与当前terminal关联的进程
- r 仅仅是正在运行的进程
- x 仅显示当前用户的进程,不管是否有terminal
- ax 显示全部进程
- UNIX options
- -A 显示全部进程,同 -e
- -a 显示除session leader和没有terminal之外的进程
- -d 显示出session leader之外的全部进程
- -e 显示全部进程
- -N 选出不满足特定条件的进程
常用的可能就是ps -e或者ps ax,选出全部进程。
4:用list方式选择
这些选项有单个参数,参数形式为空格分割或逗号分割的list
如 ps -p "1 2" -p 3,4
- BSD options
- 123 等价于 --pid 123
- p pidlist 等价于 -p,按指定的pid输出
- t ttylist 几乎等价于-t
- U userlist 用effective user ID或name来选择,如ps U root
- UNIX options
- -C cmdlist 指定命令名进行选择
- -G grplist 用real group ID或name进行选择
- -g grplist 用session或effective group name进行选择
- -U userlist 用real user ID或name进行选择
- -u userlist 用effective user ID或name进行选择
- -p pidlist 用pidlist进行选择,例如ps -p `echo {1..1000}`,顺序输出进程号在1~1000范围内的进程
- --ppid pidlist 按父进程号进行选择。
- -t ttylist 指定tty进行选择。“-”选择没有terminal的进程。
用指定的方式进行选择基本就是这么4个维度:pid,tty,cmdname,GID/UID.
按pid选择,用-p
按tty选择,用-t
按cmdname选择,用-C
按GID/UID选择,用-G/-g/-U/-g
5:输出格式控制
控制输出的信息。
- BSD options
- j 作业控制格式
- l BSD长格式
- O format 指定格式(有一些预定义的列)
- o format 与-o相同
- s signal format,显示PENDING,BLOCKED,IGNORED,CAUGHT的信号
- u 面向用户的格式,类似于top之后看到的那些
- v 显示虚拟内存格式
- X register format,显示寄存器ESP,EIP,STACKP的值
- UNIX options
- -f 全格式输出,会输出命令行参数,与-L一起使用会输出NLWP和LWP信息
- -j 作业格式
- -l 长格式
- -O format 输出指定的列和一些预定义的列,等价于-o pid,format,state,tname,time,command
- -o format 用户指定格式,能够使用的格式在后面描述,而且可以重命名输出,如ps -o pid,comm=Command。
- -y 不显示flags,只能与-l共用。
至于这些signal format,long format,register format,vitual mem format,job format,full format,还是自己输命令了查看都有哪些字段吧。 这里不统计。
常用的可能是:
l BSD长格式
u 面向用户的格式,ps axu用的挺多。
o format 指定格式输出。
-f 全格式
-l 长格式
-o format 指定格式输出。
-O format 指定格式输出。
6:输出控制修饰符
对输出进行修饰的,如更改列宽等。
- BSD options
- c 显示真正的command name,即可执行文件的名称,而不是argv的值。
- e 在command后显示环境变量
- f 树的形式显示(有斜线的)
- h no header,即没有最上面那一行的描述
- k spec 指定sorting order, [+|-]key[,[+|-]key[,...]]。如ps a kpid,按pid递增的顺序排列。ps kstart_time -ef,按进程启动时间先后顺序排列。+表示递增,-表示递减,默认为递增。
- n 数字形式输出WCHAN和USER,即数字形式的UID/GID
- S sum up some information。对一些信息进行求和,如CPU使用率
- w wide output
- UNIX options
- -H 树的形式显示(无斜线)
- -w wide output
- --width n set screen width
- --sort spec 指定排序顺序
可能排序和命令c,-H,f会需要经常用到。
7:线程相关
- BSD options
- H 将线程当成进程显示
- m 在进程后显示线程
- UNIX options
- -L 显示线程,通常会显示LWP和NLWP
- -m 进程后显示线程
- -T 显示线程,会显示SPID (不知道SPID是什么,好像就是LWP)
8:其他选项
- --help
- --info
- --version
- BSD options
- L 列出全部的format specifiers
- V 版本信息
- UNIX options
- -V
比较有用的也就是L命令,这样在使用-o命令的时候若忘了要显示的域,可以用L来查看。
9:输出格式及输出说明
(1)进程FLAGS
指定flags域后,显示进程会有“F”列,其值的意思有:
1 forked但未执行
4 使用超级用户权限
(2)进程状态 STATE
specifier:s,stat,state
header:STAT, S
- D uninterruptible sleep
- R running or runnable
- S interruptible sleep
- T stopped
- X dead(不该看到这个)
- Z 僵尸进程
- BSD格式或当stat被使用的时候会有其他一些信息
- < high-priority
- N low-priority
- L has pages locked into memory
- s session leader
- l 是多线程的
- + in foreground process group
(3)排序关键词
没有全列,更多的参考manpage
- cmd 执行文件的名字
- pcpu cpu utilization
- flags
- pgrp process group id
- utime user time
- pid process id
- ppid parent process id
- rss resident set size
- size memory size in kilobytes
- share
- tty
- start_time 启动时间
- uid user ID number
- user user name
- vsize total VM size in kB
- priority kernel scheduling priority
(4)standard format specifiers
仅列出可能常用的,其余的用ps L命令或在manpage上查看
- CPU和内存:
- %cpu cpu使用率
- %mem 进程占用的物理内存
- cp per-mill cputime
- pcpu
- pmem
- rss
- rssize
- 命令名:
- cmd
- command
- comm
- fname
- ucmd
- ucomm
- 信号:
- pending/sig
- blocked/sigmask
- caught/sigcatch
- ignored/sigignore
- 时间:
- bsdstart 启动时间
- bsdtime 累计cpu时间
- cputime cumulative cpu time
- etime elapsed time
- lstart
- start
- start_time
- stime
- 各类ID:
- uid
- uname
- user
- egid
- egroup
- euid
- euser
- fgid
- fgroup
- gid
- group
- lwp/spid/tid
- pid
- pgid
- pgrp
- ppid
- psr
- rgid
- rgroup
- ruid
- ruser
- sess
- sgi_p 但前正在执行的processor ID
- sgid
- sgroup
- sid
- suid
- supgid
- supgrp
- suser
- 控制台
- tt
- tty
- tname
- 优先级
- ni
- nice
- pri
- 标记:
- f/flag/flags
- s/state/stat
阅读(3726) | 评论(0) | 转发(0) |