ps

显示进程的当前状态


语法格式

ps [-aAcdefHFjlLmMNTwyz] [-C cmdlist] [{-g|-G|--group} grplist] [-p pidlist]
[--ppid pidlist] [-s sesslist] [-t ttylist] [{-u|-U} userlist] [-o format]
[-O format] [--format format] [--context] [-n namelist] [--cols n] [--forest]
[--headers] [--lines n] [--no-headers] [--sort spec]
ps [--help] [-V|--version] [--info]

命令简介

ps命令用于显示选定活动进程的属性信息。注意,ps命令输出的只是运行命令那一刻的快照信息。如果想要连续地观察进程的实时状态信息以及其他信息,可以使用top命令。

如果不加任何选项,ps将会选择与当前用户具有相同有效用户ID的且与同一终端相关联的所有进程,显示进程的PID、与进程关联的终端(TTY)、以“[dd-]hh:mm:ss”格式表示的CPU累计运行时间(TIME)与进程的命令名(CMD)等。通常,ps命令的输出是根据进程ID按数值排序的。

ps命令提供大量的选项,可以自定义输出的格式与内容,根据需要,可以指定一个或多个选项,选择的进程及其输出字段是指定的所有选项共同作用的结果。

除了UNIX和GNU选项,ps命令也接受BSD选项,考虑到篇幅,这里省略了BSD选项。

命令选项(简单的进程选择)

-a  显示系统中所有活动的进程(会话源以及与终端无关联的进程除外)。

-e, -A  显示系统中所有的进程。

-N, --deselect  选择不满足指定条件的所有进程。

-d  选择会话源(session leader)之外的所有进程。

命令选项(按照参数列表选择进程)

下列选项可以使用参数列表的形式指定一组具有同类属性的进程。参数之间需加逗号分隔符或空格分隔符(注意,使用空格分隔符时参数列表前后需加引号)。而且,同一个选项可以同时指定多次。例如,“ps -p "1 2" -p 3,4”。

-C cmdlist  按照指定的命令名列表选择相关的进程。

-g grplist  按照指定的会话或有效用户组列表选择相关的进程。当指定的grplist参数全是数字时,ps将按照会话选择相关的进程。仅当grplist参数中混有用户组的名字时,才按用户组ID选择相关的进程。参见“-s”与“--group”选项。

-G grplist, --Group grplist  按照指定的真实用户组ID(RGID)或用户组名列表选择相关的进程。真实用户组ID是创建进程的用户所属的用户组。

-p pidlist, --pid pidlist  按照指定的进程ID列表选择相关的进程。

-s sesslist, --sid sesslist按照指定的会话ID选择相关的进程。

-t ttylist, --tty ttylist  按照指定的终端选择相关的进程。终端的设备文件名可以是全称(如/dev/ttyS1)、简称(如ttyS1)或缩写(如S1)。连字符“-”可用于选择与终端无关的任何进程。

-u userlist, --user userlist  按照指定的有效用户ID(EUID)或用户名列表选择相关的进程。有效用户ID表示进程能够使用相应用户的权限访问文件。

-U userlist, --User userlist  按照指定的真实用户ID(RUID)或用户名列表选择相关的进程。真实用户ID表示创建进程的用户。

--group grplist  按照指定的有效用户组ID(EGID)或用户组名列表选择相关的进程。有效用户组ID表示进程能够使用相应用户组的权限访问文件。“-g”选项经常用于替代“--group”。

--ppid pidlist  按照指定的父进程ID(PPID)选择相关的进程。也就是说,选择从属于指定父进程的子进程。

命令选项(输出信息与格式控制)

-c  与“-l”选项一起使用时显示进程的各种调度信息,包括进程的调度类别与优先级等。

-f  采用完整的属性展示格式显示进程的各种重要状态信息,尤其是进程的起始运行时间和进程占用的CPU时间等。这个选项可与其他许多UNIX风格的传统选项一起组合使用,增加较多的进程属性字段,如显示命令的参数等。尤其是当与“-L”一起使用时,将会增加NLWP(线程数量)和LWP(线程ID)字段。

-F  采用更完整的属性展示格式,能够显示比“-f”选项还要多的进程状态信息。

-j  按照作业的特点显示进程的状态与属性信息,如进程组ID(PGID)与会话ID(SID)等。

-l  采用长格式,显示进程的详细状态信息(进程的起始运行时间除外),这个选项经常与“-y”选项一起配合使用。

-o format  按照用户定义的输出字段与格式显示进程的属性。format参数由一组字段定义组成,中间加逗号或空格(format参数前后需加引号)分隔符,指定ps命令的输出字段。“-o”选项提供了一种方法,能够由用户定制输出内容。ps命令认可的字段定义详见“标准输出格式的字段定义”一节。利用字段定义,显示的标题栏可以按用户的意愿重新命名,如“ps -o pid,ruser=RealUser -o args=Command”。如果指定的标题栏较长,列宽也将随之增大。此外也可以使用宽度定义控制列宽。例如,“ps -opid,wchan:20,cmd”命令定义WCHAN的列宽为20个字符。如果使用“-o”选项觉得麻烦,可以事先利用PS_FORMAT环境变量指定默认的输出字段。

-O format  类似于“-o”选项,但已经预选了部分默认的字段,其效果等同于指定了“-o pid,state,tname,time,args”选项。

-y  禁止显示标志字段,同时以RSS字段替代ADDR字段。注意,这个选项只能与“-l”选项一起使用。

-Z, -M  显示进程的SELinux安全属性等。

--format format  按照用户定义的输出格式显示进程的属性。等同于“-o”选项。

--context  显示进程的SELinux安全属性。

命令选项(输出信息与格式调整)

-H  采用缩进形式表示进程间的调用层次关系。

-n namelist  指定namelist(System.map)文件。为了适当地显示WCHAN字段的值,需要用到namelist文件,且必须严格匹配当前运行的Linux系统内核,才能得到正确的输出结果,如果未指定这个选项,namelist文件的默认检索顺序是:$PS_SYSMAP、$PS_SYSTEM_MAP、/proc/*/wchan、/boot/System.map-`uname -r`、/boot/System.map、/lib/modules/`uname -r`/System.map、/usr/src/linux/System. map与/System.map。

-w  采用超宽的展示形式,显示完整的进程状态信息。通常,在显示进程的状态信息时,每个进程仅占一行,如果进程的状态信息较长,命令字段的超常部分将会被截断。使用此选项时,超长部分将会延续到下一行输出。如果再加一个w,即使用“-ww”选项时,显示的宽度几乎没有限制。

--cols n, --columns n, --width n  设置屏幕的显示宽度。

--forest  采用符号指向与缩进形式的树状结构显示进程间的调用层次关系。

--headers  重复显示标题行,每输出一页显示一次标题行。

--info  显示大量的调试信息,然后退出。

--lines n, --rows n  设置屏幕的显示行数。

--no-headers  禁止显示标题行。

--sort spec  指定排序方法。排序的语法格式是“[+|-]key[,[+|-]key[,...]]”,其中key是字段定义(参见“标准输出格式的字段定义”一节),“+”是选用和默认的,意味着按数值或字符的编码顺序从小到大排序,“-”表示逆向排序。必要时,可以同时指定多个排序字段定义,例如,“ps -jax --sort=uid,-ppid,+pid”。

命令选项(显示线程)

-L  显示线程,包括PID与LWP等输出字段。

-T  显示线程,包括PID与SPID等输出字段。

-m  在进程之后显示其线程。

常规的输出字段

ps命令的输出,通常包括PID、UID、GID和CMD等一系列进程属性字段,尤其当选用“-f”、“-F”、“-l”、“-j”、“-L”或“-T”选项时,将会显示更多的进程属性字段,下面逐一列举,并给出简单的说明。

C  采用整数百分比显示进程的CPU利用率(参见%CPU)。其值等于进程实际使用的CPU时间除以进程整个生命周期的时间总量(包括等待时间)。

F  进程的标志。标志字段可以是下列值之一或两个值的和:

1  使用fork()系统调用创建,但未使用exec()系统调用运行的进程;

4  使用了超级用户特权的进程。

S  采用单字符表示的进程状态,参见“进程状态标志”一节。

ADDR  进程的内存地址。

CLS  进程的调度策略或调度类别。可能出现的值如下:

-  未提供任何调度信息。

TS  SCHED_NORMAL/OTHER(常规的分时调度)。

FF  SCHED_FIFO(先到先运行的实时调度)。

RR  SCHED_RR(时间片轮换的实时调度)。

B  SCHED_BATCH(非交互的批处理式调度类别)。

ISO  SCHED_ISO(伪实时调度类别,不需要超级用户权限)。

IDL  SCHED_IDLE(极低优先级的空闲时运行调度类别)。

?  给出的值无法识别。

CMD  显示进程的命令名或整个命令行(包括命令的名字、选项、参数及空格分隔符)。如果命令或命令行过长,除非指定了“-w”选项,通常会截掉超长部分,确保每行仅显示一个进程。通常,命令字段是最后一个字段,因而会延展到整个窗口的最右边缘。必要时可以使用COLUMNS环境变量、“--cols”或“-w”选项调整屏幕的宽度。

NI  进程优先级的调整值,从高到低,其范围是-20~19。

PGID  进程的真实用户组ID(十进制的整数)。

PID  进程的ID号。

PPID  进程的父进程ID。

PRI  进程的优先级。优先级数字越大表示进程的优先级越低。

PSR  进程当前分配的CPU。

RSS  进程常驻内存的数量(单位为KB)。

SID  会话ID或作为会话源(session leader)的进程的PID。

STIME  进程的起始运行时间。如果起始时间在24小时之内,以“HH:MM”形式显示,如果超过24小时,以“mmm dd”形式显示,其中mmm是英文月名的前三个字母,dd表示日。仅当起始时间超过一年时才显示年份。

SZ  进程核心映像(包括代码段、数据段以及栈空间)占用的物理内存页面的容量。这个数字目前尚不包括设备或文件映射的内存数量。

TIME  从调度运行开始,进程迄今累计占用的CPU时间总和,以“[dd-]hh:mm:ss”形式表示。

TTY  控制终端的设备文件名,表示进程(或其父进程)是从哪一个终端上启动运行的。如果这个字段是问号“?”,表示进程与任何控制终端无关。

UID  进程的有效用户ID(十进制的整数)。

WCHAN  因等待某一资源或事件的发生导致进程处于休眠状态的系统内核函数的名字(“-”表示进程正在运行,“*”表示进程是一个多线程的进程,而ps命令并未显示线程)。

标准的输出格式字段定义

在“-o”或“-O”选项中,可以使用字段定义控制ps命令的输出字段。在“--sort”选项中,也可以使用字段定义排序各种选项选择的进程(注意,并非所有的字段定义都能用于排序)。例如,“ps -eo pid,user,args --sort user”。

进程状态标志

当使用s、stat和state字段定义指定输出字段STAT或S时,其中可能出现下列字符,表示进程的当前状态。

D  处于休眠状态但不能中断的进程(通常为I/O进程)。

R  正在运行或处于运行队列,正在等待调度运行的进程。任何时刻,每个CPU只能有一个进程处于运行状态。

S  因等待某一事件完成而处于休眠状态的进程(进程可以中断)。

T  由于跟踪或因作业控制信号导致进程中断执行而处于暂停运行状态的进程。

X  进程已终止(通常不会见到此类进程)。

Z  僵尸进程(已经终止运行但尚未被其父进程彻底销毁的进程)。

在使用stat字段定义指定输出字段STAT时,其中还会出现下列附加的状态标志字符:

<  高优先级,没有施加优先级调整值降低优先级。

N  低优先级,已经施加优先级调整值降低了优先级。

L  进程存在锁于内存的页面(仅当处于实时或定制I/O的调度类别时才会出现)。

s  当前进程是一个会话源。

l  多线程的进程。

+  当前进程处于前台进程组。

应用实例

1. 显示系统当前启动的所有活动的进程。

$ ps -ef

2. 显示进程调用的层次关系。

$ ps -e --forest

3. 采用自定义的方式显示进程的状态信息。

$ ps -eo pid,stat,ruid,euid,sid,pgid,stime,time,%cpu,%mem,comm

4. 在$HOME/.bash_profile文件中定义PS_FORMAT,以便之后运行ps命令时使用。

PS_FORMAT=pid,stat,ruid,euid,sid,pgid,stime,time,%cpu,%mem,comm
export PS_FORMAT

索引:A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z