Linux(入门基础):90—进程的查看(ps、top、pstree、pstack命令)
一、静态查看进程(ps)
- 概念:ps命令可以查看当前系统中的进程
- 格式:
ps [options]
- 相关参数与选项:
- -A:所有的进程都显示,与-e相同
- -a:不显示与终端有关的线程
- -u:有效使用者的相关线程
- -y:不显示F列,以RSS列代替ADDR列。只能与-l一起使用
- 输出格式相关选项:
- l(小写的L):以BSD的风格显示
- -l(小写的L):较长、较详细的将更多的信息显示出来。一般与-y一起使用。只是显示当前终端的信息
- j:任务的格式
- -f:做一个更为完整的输出
- 常用使用场景:
- ps axjf ==>以进程树的方式查看系统中所有的进程
- ps -lA ==>查看系统所有的进程,格式与ps -l相同
- ps aux ==>查看系统所有的进程
僵尸进程
- 产生的原因:一般的原因是进程已经执行完毕,或者快要终止时,该进程的父进程缺无法完整地将该进程结束掉,造成该进程一直存在于内存中
- 如何消除:一般系统不稳定时会造成僵尸进程,如果想要消除这个僵尸进程一般要先找到父进程,然后好好做个追踪以进行优化。如果僵尸进程已经无法管理了,通常需要交给systemd(centos中)/init(ubuntu中)进程负责,但是systemd/init是系统中的第一个进城,它下面还有很多进程,因此不能直接杀死systemd/init进程。如果真的处理不了,只好通过reboot的方式来将进程kill掉
- 格式特点:使用ps查看时,如果COMMAND后面有defunct字样,代表这是个僵尸进程
- 例如下面演示一个僵死进程:
root 576 0.0 0.0 19300 652 ? Ss 09:26 0:00 /usr/sbin/bluetoothd <defunct>
演示案例
- ps -l查看的当前终端有关的进程,父进程、子进程都会显示
F 进程标识,说明这个进程的权限 常见的:4(代表是root权限的),1(表示子进程仅执行复制但没有实际执行)
S 进程的状态(STAT)。 R:进程正在运行
S:进程处于睡眠,但是可以被唤醒
D:不可唤醒的睡眠状态,通常这个进程可能在等待I/O的情况(ex>打印)
T:停止状态,可能是在任务控制(后台暂停)或跟踪状态
Z:僵尸状态。此进程已经终止但无法被删除至内存外
UID/PID/PPID 此进程的UID、PID、PPID C 代表CPU的使用率,单位为百分比 PRI/NI 代表此进程被CPU所执行的优先级,数值越小代表该进程越快被CPU执行 ADDR/SZ/WCHAN 都与内存有关 ADDR:代表该进程在内存的哪个部分,如果进程是running的,一般显示-
SZ:代表此进程占用了多少内存
WCHAN:表示目前进程是否运行,若为-代表在运行
TTY 登陆者的终端位置,若为远程登录则使用动态终端接口名称(pts/n) TIME 使用CPU的时间,但不是系统时间 CMD 触发此进程的命令是什么
演示案例
- 以ps -l的格式查看系统所有的进程:
ps -lA
- 显示的内容是系统所有的进程,信息分栏的格式是与ps -l相同的
演示案例
- 查看系统所有的进程:
ps aux
- 一般ps axu会依照PID来排序显示
USER/PID 此进程的用户和PID %CPU 进程占用CPU的百分比 %MEN 进程占用物理内存的百分比 VSZ 进程占用虚拟内存的量(KB) RSS 进程占用固定的内存量(KB) TTY 该进程在哪个终端登录的。若无终端显示?,若为ps/0..等一般是由网络连接进入主机的进程 STAT 该进程目前的状态 R:进程正在运行
S:进程处于睡眠,但是可以被唤醒
D:不可唤醒的睡眠状态,通常这个进程可能在等待I/O的情况(ex>打印)
T:停止状态,可能是在任务控制(后台暂停)或跟踪状态
Z:僵尸状态。此进程已经终止但无法被删除至内存外
START 该进程被触发启动的时间 TIME 该进程实际使用CPU的时间 COMMAND 触发该进程的命令
演示案例
- 以进程树的方式显示进程:
ps axjf
- 进程树会显示进程之间的关系,不过也可以使用后面的pstree来查看
二、动态的查看进程(top)
- top中也可以用来动态查看进程,详情参阅:https://blog.csdn.net/qq_41453285/article/details/88374951
三、以进程树的格式查看进程(pstree)
1.命令格式
- pstree [选项]
相关选项与参数
- -A:各进程树之间以ASCII字符来连接
- -U:各进程树之间以Unicode字符来连接
- -p:同时列出进程的所属PID
- -u:同时列出每个进程的所属账号
2.提示
- pstree可以很好的显示进程之间的父子关系
- 重点:centos中第一个进程是systemd,Ubuntu中第一个进程是init,这两个进程的PID都是1,因此系统会第一个调用这个进程,其他所有进程都是由这两个进程延伸出来的
3.演示案例
- 案例一:以ASCII字符方式显示进程树
- 案例二:同时显示每个进程的PID和用户名
- 括号内的为进程PID和该进程的用户名
- 如果该进程的用户名与就是父进程的用户名相同就不会显示用户名,只显示出PID
四、pstack
- pstack命令用来显示每个进程的调用栈。可以使用pstack来查看进程正在挂起的执行方法,也可以用来查看进程的本地线程堆栈,与JVM的jstack配合可以看到JVM线程运 行的全景
- 安装如下:
sudo apt-get install pstack
- 格式如下:
pstack pid [...]
演示案例
- 查看25900进程的调用栈
pstack 25900
转载请注明:SuperIT » Linux(入门基础):90—进程的查看(ps、top、pstree、pstack命令)