Linux使用ps查看系统进程信息的多种姿势

时间:2022-10-02 20:32:44

本文摘自Linux Shell脚本编程一书。

Linux中使用ps来查看系统进程的信息,其可以带不同的参数从而显示不同的结果。

Linux使用的GNU ps命令支持三种不同类型的命令行参数。
Unix风格的参数,前面加单破折号
BSD风格的参数,前面不加破折号
GNU风格的长参数,前面加双破折号

注意,下面的命令在某些系列某些版本的Linux上可能无法运行。

首先是Unix风格的参数
默认情况下,ps命令只会显示运行在当前控制台下的属于当前用户的进行,输出的信息分别是:
程序的进程id(PID)、程序运行在哪一个终端(TTY)、进程已经使用的CPU时间、进程的名字(CMD);
ps -A:显示所有的进程(ps -e)
Ps -N:显示与指定参数不符的所有进程
Ps -a:显示除控制进程(session leader)和无终端进程外的所有进程
Ps -d:显示除控制进程之外的所有进程
Ps -C cmdlist:显示包含在cmdlist列表中的进程
Ps -G grplist:显示组id在grplist列表中的进程
Ps -U userlist:显示属主的用户ID在userlist列表中的进程
Ps -g grplist:显示会话或组ID在grplist列表中的进程
Ps -p pidlist:显示PID在pidlist列表中的进程
ps -s sesslist:显示会话ID在sesslist列表中的进程
Ps -t ttylist:显示终端ID在ttylist列表中的进程
Ps -u userlist:显示有效用户ID在userlist列表中的进程
Ps -F:显示更多的额外输出
Ps -O format:显示默认的输出列以及format列表指定的特定列
Ps -M:显示进程的安全信息
Ps -c:显示进程额外的调度信息
Ps -f:显示完整格式的输出
Ps -j:显示任务信息
Ps -l:显示长列表
Ps -y:不要显示进程标记
Ps -Z:显示安全标签信息
Ps -H:用层级格式来显示进程
Ps -w:采用宽输出模式,不限制宽度的显示
Ps -L:显示进程中的线程
Ps -V:显示ps命令的版本号

常用的方式:ps -ef:
UID:启动这些进程的用户;
PID:进程的进程ID
PPID:父进程的进程号(如果该进程是由另外的进程启动的)
C:进程生命周期中的CPU利用率
STIME:进程启动时候的系统时间
TTY:进程启动时的终端设备
TIME:运行进程所需要的累计CPU时间。
CMD:启动的程序名称
Ps -l可以查看更多的信息:
F:系统内核分配给进程的系统标记
S:进程的状态(O表示正在运行;S表示在休眠;R表示可运行,正等待运行;Z表示僵化进程已经结束但是父进程已经不存在;T表示停止)

BSD风格的参数:
Ps T:显示跟当前终端关联的所有进程
Ps a:显示跟任意终端关联的所有进程
Ps g:显示所有的进程,包括控制进程
Ps r:仅显示运行中的进程
Ps x:显示所有的进程,甚至包括未分配的任何终端的进程
ps Z:将安全信息添加到输出中
Ps X:按照过去的Linux i386寄存器的格式显示
Ps l:采用长模式
Ps j:显示任务信息
Ps s:采用信号格式显示
Ps u:采用基于用户的格式显示
Ps v:采用虚拟内存格式显示
Ps S:将数值信息从子进程加到父进程上,比如CPU和内存的使用情况
Ps c:显示真实的命令名称(用于启动进程的程序名称)
Ps e:显示命令使用的环境变量
Ps f:用分层格式来显示进程,表明那些进程启动了哪些进程
Ps h:不显示头信息
Ps n:和WCHAN信息一起显示出来,用数值表示用户ID和组ID
Ps w:为较宽的屏幕输出宽输出
Ps H:将线程按进程来显示
Ps m:在进程之后显示线程
Ps L:列出所有格式指定字符
Ps V:显示ps命令的版本号

BSD格式下更为常用的用法: ps l
VSZ:进程在内存中的大小,以千字节为单位
RSS:进程在未换出的时候占用的物理内存
STAT:代表当前进程状态的双字符码,其中第一位和Unix风格下的S列的值的意义相同,第二个参数的意义如下:
< : 该进程运行在高优先级上
N : 该进程运行在低优先级上
L : 该进程有页面锁定在内存中 l : 该进程是多线程的
S : 该进程是控制进程
+ : 该进程运行在前台

GNU长参数:
Ps –deselect:显示所有的进程
Ps –Group grplist:显示组ID在grplist列表中的进程
Ps –User userlist:显示用户ID在userlist列表中的进程
Ps –forest:用层级结构显示出进程和父进程之间的关系
Ps –headers:在每页输出中都显示列的头
Ps –no-headers:不显示列的头