前言
在linux环境服务器下通常是不会安装图形界面的,这时如果想看程序是否在正常运行着,就不能像在windows上一样去查看任务管理器,而是需要通过命令来查询程序的进程运行情况,ps
就是一个查询linux环境下进程运行状态的命令,请注意这个可不是我们P图用的那个工具哦。
ps命令
ps
命令在man手册中描述是 “report a snapshot of the current processes”,其实它的作用就是上报程序运行时的一个快照。
ps displays information about a selection of the active processes. If you want a repetitive update of the selection and the displayed information, use top(1) instead.
man手册中的这句话也很好理解,ps
命令执行一次就会显示一次所选进程的信息,若想重复刷新显示所选进程的信息,可以使用 top
命令,从作用上来看,可以简单理解为 top
命令是一个反复执行的 ps
命令。
语法格式
1 | ps [options] |
ps
命令的格式很简单,但是为什么感觉同一个查询进程的需求,每个人写出来的命令都不太一样呢?其实这是因为有好几种语法规范,无论怎么写都可以,甚至交叉混合的写命令都是能识别的,比如最常见的查询所有进程有些人会写成 ps -ef
,而有的人会写成 ps aux
,这两种都是可以的。
语法规范
ps -ef
是使用了UNIX选项,是一种标准语法,而 ps aux
使用了BSD选项,是一种BSD语法,另外还有一种加两个短横线的写法,例如 ps --pid 3678
,这是一种GNU长选项。
常用的ps选项
- 显示所有的进程,一般搭配grep使用
1 | ps aux | grep processname |
- 显示指定的列,可以使用
-eo
来指列名,我最常用的 cmd 是启动时的命令,lstart 是启动时的时间
1 | [root@VM-0-3-centos ~]# ps -eo cmd,lstart | grep sshd |
- 以树形结构显示进程
1 | ps -axjf |
- 查询指定用户的进程
1 | ps -fu root |
- 按cpu使用率降序排序
1 | ps -aux --sort -pcpu |
- 按内存使用率降序排序
1 | ps -aux --sort +pmem |
ps命令的表头
1 | [root@VM-0-3-centos ~]# ps -aux --sort -pcpu |
执行 ps
命令通常有以上几列:USER
、PID
、%CPU
、%MEM
、VSZ
、RSS
、TTY
、STAT
、START
、TIME
、COMMAND
USER
:进程所属用户名PID
:进程ID%CPU
:进程CPU使用率,注意所有CPU使用率加起来可以超过100%,如果有4个CPU,在不考虑多核的情况下,最大应该为400%%MEM
:进程内存使用率,可以配合 free -h
命令使用VSZ
:进程使用的虚拟内存量RSS
:进程占用的固定内存量TTY
:进程在哪个终端上运行,若与终端无关,则显示 ?
STAT
:进程启动的时间START
:进程状态,是一个组合值,每个符号有单独含义,见下文TIME
:进程使用CPU运行的时间COMMAND
:启动进程时执行的命令的名称和参数
进程状态
这一部分是要是对man手册的翻译内容
1 | Here are the different values that the s, stat and state output specifiers (header "STAT" or "S") |
常规状态码
D
: 无法中断的休眠状态(通常 IO 的进程)R
: 正在运行可中在队列中可过行的;S
: 处于休眠状态T
: 停止或被追踪W
: 进入内存交换(从内核2.6开始无效)X
: 死掉的进程(基本很少见)Z
: 僵尸进程,想杀死通常需要重启系统
BSD格式状态码
<
: 优先级高的进程N
: 优先级较低的进程L
: 有些页被锁进内存s
: 一个会话进程的领导者(在它之下有子进程)l
: 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads)+
: 位于后台的进程组
进程相关的后续命令
- 查询进程的可执行文件所在位置
1 | cat /proc/进程id |
- 按进程名查询进程id
1 | pidof 进程名 |
top命令
语法格式
1 | top [options] |
top
命令的man手册巨长,它的作用是动态显示进程状态,实际上就是一份份静态数据间隔显示而已,虽然他也有很多参数,但是通常仅使用一个 top
命令即可。
常用的top选项和快捷键
- 显示top帮助
1 | top -hV |
- 按照CPU使用率排序
运行top命令后,输入大写字母P,也就是按快捷键 ctrl+p
- 按照内存使用率排序
运行top命令后,输入大写字母M,也就是按快捷键 ctrl+m
- 展开多核cpu显示
运行top命令后,输入数字1
- 切换显示命令名称和完整命令行
运行top命令后,输入小写字母c
- 切换显示平均负载和启动时间信息
运行top命令后,输入小写字母l
top命令的表头
1 | [root@VM-0-3-centos ~]# top |
执行 top
命令后默认有这些列 PID
、USER
、PR
、NI
、VIRT
、RES
、SHR
、S
、%CPU
、%MEM
、TIME+
、COMMAND
,它们的含义分表是:
PID
:进程idUSER
:进程所有者用户名PR
:优先级NI
:NICE值.负值表示高优先级,正值表示低优先级VIRT
:进程使用的虚拟内存总量,单位KB,VIRT=SWAP+RESRES
:进程使用的未被换出的物理内存大小,单位KB,RES=CODE+DATASHR
:共享内存大小,单位KB,S
:进程状态,D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程%CPU
:CPU使用百分比%MEM
、内存使用百分比TIME+
:进程使用的CPU时间总计,单位1/100秒COMMAND
:启动命令
总结
- 显示所有进程可以使用
ps -ef
或者ps aux
,他们通常是后续过滤的第一步 - 按cpu使用率降序排序使用
ps aux --sort -pcpu
,按内存使用率降序排序使用ps aux --sort +pmem
top
命令结果的第一行是整体信息,包括了当前时间,系统已运行时间,登录用户数,系统负载等信息top
命令中按大写字母P
会按照CPU排序,按大写字母M
会按照内存排序
小孩子才有对错,长大了都是利益。做选择的本质是分类,权衡利弊的过程是分类,趋利避害的行事生活更是分类,所以遇到选择我们才要考虑方方面面,因为这样我们才有足够的理由来把它归为有利的一类,还是有害的一类~
2022-1-28 00:41:05