ps命令用来列出系统中当前运行进程的快照。

命令功能

ps命令(Process Status)用来列出系统中当前运行的那些进程的快照。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。如果想要动态地显示进程信息,就可以使用top命令

命令格式

ps [options]

命令参数

表: ps命令选项

选项 含义
-A 所有的不同process均显示出来,与-e具有同样的效果
-a 不与terminal有关的所有process
-u 有效使用者(effectiveuser)相关的process
-e 列出所有程序,与-A效果相同
-x 通常与a这个参数一起使用,可列出完整的信息
-l 较长、较详细的输出该该PID的信息
-j 工作的格式(jobsformat)
-f 做一个更为完整的输出

ps命令支持三种使用的语法格式:

  1. UNIX 风格,选项可以组合在一起,并且选项前必须有“-”连字符
  2. BSD 风格,选项可以组合在一起,但是选项前不能有“-”连字符
  3. GNU 风格的长选项,选项前有两个“-”连字符

命令实例

不加参数执行ps命令

描述:结果显示4列信息,这些信息并未排序。
命令:ps
输出:

表: ps命令默认的列表所代表的含义

选项 含义
PID 运行着的命令(CMD)的进程编号
TTY 命令所运行的位置(终端)
TIME 运行着的该命令所占用的CPU处理时间
CMD 该进程所运行的命令

显示更多信息

描述:ps默认只显示属于当前用户这次登录的PID与相关信息,-l参数显示更详细的信息。
命令:ps -l
输出:

-l显示信息的每个字段具体含义如下:

  • F:代表这个程序的旗标(process flags),说明这个程序的总结权限,常见的有:
    • 若为4表示此程序的权限为root。
    • 若为1表示此子程序仅进行复制(fork)而没有实际执行(exec)。
  • S:代表这个程序的状态(STAT),主要的状态有:
    • R(Running):该程序正在运行中。
    • S(Sleep):该程序目前正在睡眠状态(idle),但可以被唤醒(signal)。
    • D:不可被唤醒的睡眠状态,例如,程序可能在等待I/O的情况。
    • T:停止状态(stop),可能是在工作控制(背景暂停)或出错(traced)状态。
    • Z:僵尸(Zombie)状态,程序已经终止但却无法被移除到内存外。
  • UID/PID/PPID:代表程序被该UID所拥有/程序的PID号码/程序的父程序PID号码。
  • C:代表CPU使用率,单位为百分比。
  • PRI/NI:Priority/Nice的缩写,代表程序被CPU所执行的优先顺序,数值越小代表程序越快被CPU执行。
  • ADDR/SZ/WCHAN:都与内存有关,ADDR是kernel function,指出该程序在内存的哪个部分,如果是个running的程序,一般就会显示“-”,SZ代表程序用掉多少内存,WCHAN表示目前程序是否运行中,同样的,若为-表示正在运行中。
  • TTY:登陆者的终端机位置,若为远端登陆则使用动态终端接口(pts/n)。
  • TIME:使用掉的CPU时间,此程序实际花费CPU运行的时间,而不是系统时间。
  • CMD:command的缩写,造成此程序的出发程序是什么。

显示所有进程

描述:使用-a参数,-a代表all,加上x参数会显示没有控制终端的进程。可以结合less命令和管道来使用。
命令:
ps -ax
ps -ax | less
输出:

说明:如果用户名的长度大于8个字符,那么ps只会显示UID。

显示所有进程信息,连同命令行

描述:-e参数与-A参数一样显示所有进程信息,-a将不显示命令行。-f和u选项可以显示进程的具体信息。
命令:ps efu
输出:

显示用户进程

描述:查看root用户的进程信息。-u选项后跟用户名过滤所属用户的进程,多个用户名用逗号分隔。
命令:ps -u root
输出:

通过进程名和PID过滤进程

描述:-C选项可以显示指定进程名的进程信息。
命令:ps -C agetty
输出:

描述:-p选项通过进程ID显示进程,通过逗号分隔来指定多个进程ID。
命令:ps -f -p 423,32535,2087
输出:

描述:使用grep查找,因为-C选项必须提供精确的进程名,它并不能通过部分名字或者通配符查找。
命令:ps -ef | grep ssh
输出:

描述:只列出指定进程名的进程ID。
命令:ps -C agetty -o pid=
输出:

描述:-f选项查看格式化的信息列表。
命令:ps -f -C agetty
输出:

描述:只打印进程ID为27815的进程名字。
命令:ps -q 27815 -o comm=
输出:

通过cpu和内存使用来过滤进程

描述:列出目前所有的正在内存当中的程序。ps aux会依照PID的顺序来排序显示,只显示排在前面的一部分数据。

命令:ps aux | less
输出:

描述:根据CPU使用来排序。默认的结果集是依照PID的顺序来排序显示的,可以通过–sort命令来排序。
命令:ps -aux --sort -pcpu | less

描述:根据内存使用来排序。默认的结果集是依照PID的顺序来排序显示的,可以通过–sort命令来排序。
命令:ps -aux --sort -pmem | less

描述:将前两个命令合并,通过管道显示前10个结果。
命令:
ps -aux --sort -pcpu,+pmem | head -n 10
ps -aux --sort=-pcpu,+pmem | head -n 10

描述:ps aux会依照PID的顺序来排序显示,只显示排在前面的一部分数据。
命令:ps -aux > out.txt

表: ps命令显示字段的意义

选项 含义
User 该process属于哪个使用者账号
PID 该process使用掉的CPU资源百分比
%CPU 该process所占用的实体内存百分比
%MEM 该process所占用的实体内存百分比
VSZ 该process使用掉的虚拟内存量(KBytes)
RSS 该process占用的固定的内存量(KBytes)
TTY 该process是在哪个终端机上面运行,若与终端机无关则显示?另外,tty1-tty6是本机上面的登陆者程序,如果是pts/0等等的,则表示为网络连接的主机程序
STAT 该process目前的状态,状态显示与ps -l的S旗标相同(R/S/T/Z)
START 该process被触发启动的时间
TIME 该process实际使用CPU运行的时间
COMMAND 该process的实际指令是什么

格式化输出root用户(真实的或有效的UID)创建的进程

描述:查看由root用户运行的进程以及其他相关信息。
命令:ps -U root -u root u
输出:

说明:
-U参数按真实用户ID(RUID)筛选进程,它会从用户列表中选择真实用户名或 ID。真实用户即实际创建该进程的用户。
-u参数用来筛选有效用户ID(EUID)。
最后的u参数用来决定以针对用户的格式输出,由User,PID,%CPU,%MEM,VSZ,RSS,TTY,STAT,START,TIME和COMMAND这几列组成。

指定显示的格式

描述:-o显示指定的格式输出,–sort=-%mem指定以内存倒序的方式显示程序。
命令:ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head
输出:

1
2
3
4
5
6
7
8
9
10
11
# ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head
PID PPID CMD %MEM %CPU
1248 1029 /usr/local/cloudmonitor/jre 3.6 0.4
690 1 /usr/bin/python -Es /usr/sb 0.8 0.0
976 1 /usr/local/aegis/aegis_clie 0.6 0.1
423 1 /usr/lib/polkit-1/polkitd - 0.6 0.0
16409 2099 sshd: root@pts/0 0.3 0.0
15920 2099 sshd: root@pts/2 0.3 0.0
16213 2099 sshd: root@pts/1 0.3 0.0
16451 2099 sshd: root@pts/3 0.3 0.0
687 1 /usr/sbin/rsyslogd -n 0.2 0.0

描述:显示安全信息,查看谁登录了服务器。能够与-e参数一起使用的关键字是args,cmd,comm,command,fname,ucmd,ucomm,lstart,bsdstart和start。
命令:ps -eo pid,user,args
输出:

通过线程过滤进程

描述:-L选项可以过滤特定进程的线程。
命令:ps -L 456
输出:

实时监控进程状态

描述:每秒刷新一次ps命令,使之动态显示CPU和内存的使用率。
命令:watch -n 1 'ps -aux --sort -pmem,-pcpu'
输出:

描述:每秒刷新一次ps命令,使之动态显示CPU和内存的使用率,显示前20条内容。
命令:watch -n 1 'ps -aux --sort -pmem,-pcpu | head -20'
输出:

描述:与top不同的是,ps可以选择想查看的字段。
命令:watch -n 1 'ps -U nijun u --sort -pmem,-pcpu | head -20'
输出:

树形显示进程

描述:显示类似程序树的进程信息。
命令:ps -axjf
输出:

命令:ps -ejH
输出:

描述:forest选项会构造一个树形进程层次视图。
命令:ps -f --forest -C sshd
输出:

描述:另一个显示树形结构的命令。
命令:pstree

杀掉进程

描述:用ps -A命令列出所有进程,然后通过管道输入到grep来查找进程/服务,例如ssh。
命令:ps -A | grep -i ssh
输出:

描述:使用pgrep和pkill工具更简单。
命令:
pgrep ssh
pgrep -l ssh
输出:

要找和ssh相关的进程信息:

为了避免kill掉错误的进程,也可以通过下面命令来匹配进程名称:

然后用pkill杀掉进程,只需要输入想要杀死的资源名称。