查看进程的静态命令ps 和动态命令top
学习书籍《鸟哥的LINUX私房菜 基础学习篇 (第四版)》
查看进程一共三个命令:ps , top, pstree
ps: 静态查看top: 动态查看pstree: 查看进程树之间的关系 (本篇暂未记录)
ps
常用:
ps aux查看系统所有进程ps -lA 同ps aux作用ps axjf连同部分进程树的状态ps -l 只查看自己bash进程
选项与参数:
-A : 所有进程均显示出来-u: 有效使用者相关的进程x: 通常与a这个参数一起使用,列出较完整信息l: 长格式输出j: 任务的格式(jobs format)-f: 做一个更为完整的输出
选项前加不加-(减号),ps -l
和ps l
显示如下:
执行ps aux
和ps -aux
除了最后一行它们自己本身命令显示的差异外也是一样的。
书里没写有无减号的意义 但执行命令输出暂时看起来没有太大查别。
ps -l 的输出列解释:
#只查看自己当前bash此次登录的PID以及相关信息[root@iZ2ze3a5ws0mjxyxfspk8nZ ~]# ps -l F S UIDPID PPID C PRI NI ADDR SZ WCHAN TTYTIME CMD0 S0 2032576 2032558 0 80 0 - 55840 -pts/0 00:00:00 bash4 R0 2033289 2032576 0 80 0 - 56589 -pts/0 00:00:00 ps
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所执行的优先级。数值越小表示越先被执行。
ADDR/SZ/WCHAN:都与内存有关。ADDR为kernel function,表示该进程在内存的哪个部分,如果是running的进程,则显示-;SZ表示此进程用掉多少内存;WCHAN:表示目前进程是否在运行,-表示在运行中。
TTY:登录者的终端位置,若为远程登录则使用动态终端接口名称pts/n。
TIME:此进程实际花费CPU运行的时间。
CMD:command缩写,表示造成此进程的触发命令是什么。
所以上述输出的
[root@iZ2ze3a5ws0mjxyxfspk8nZ ~]# ps -l F S UIDPID PPID C PRI NI ADDR SZ WCHAN TTYTIME CMD0 S0 2032576 2032558 0 80 0 - 55840 -pts/0 00:00:00 bash4 R0 2033289 2032576 0 80 0 - 56589 -pts/0 00:00:00 ps
表示:
bash的进程属于UID为0的用户,状态为睡眠,之所以为睡眠是因为它触发了ps(状态为run)。此进程PID为2032576,优先执行顺序为80,执行bash所获取的终端接口为pts/0,运行状态为-(running)。
ps aux的输出列解释:
USER: 该进程属于所属用户账号;
PID:进程的进程ID;
%CPU:进程使用掉的CPU资源百分比;
%MEM:进程所占用的物理内存百分比;
VSZ:进程使用掉的虚拟内存量(KB);
RSS:进程占用的固定内存量(KB);
TTY:进程在哪个终端上面运行,若与终端无关则显示?(问号)(如systemd进程),若为pts/0等表示由网络连接进入主机的进程;
STAT: 该进程目前的状态,与ps -l的S标识相同(R/S/T/Z);
START:该进程被触发启动的时间;
TIME:该进程实际使用CPU运行的时间;
COMMAND:该进程的实际命令是什么;
一般来说 ps aux 会按照PID的顺序来排序显示。
找出与cron与rsyslog这两个服务有关的PID号码:
[root@iZ2ze3a5ws0mjxyxfspk8nZ ~]# ps aux|egrep '(cron|rsyslog)'root 1240 0.0 1.7 679868 36024 ? Ssl 9:19 /usr/sbin/rsyslogd -nroot 1247 0.0 0.0 223116 1920 ? Ss 0:04 /usr/sbin/crond -nroot2033386 0.0 0.0 221528 860 pts/0 R+ 17:37 0:00 grep -E --color=auto (cron|rsyslog)
使用ps aux|egrep ‘正则表达式服务名’ 来模糊查找对应的进程信息
僵尸进程:该进程应该已经执行完毕,或是应该要终止了,但是该进程的父进程却无法完整地将进程结束掉,造成该进程一直存在内存当中。如果你发现某个进程CMD后面跟着<defunct>
时,就代表该进程是僵尸进程。
产生场景:系统不稳定容易造成;程序写的不好;用户操作习惯不良等;
top 动态查看进程
相对于ps是选取一个时间点的进程状态,top则可以持续监测进程运行的状态。
top [-d 数字] | top [-bnp]
选项与参数:
-d: 后面接秒数,表示整个进程姐妹更新的秒数,默认是5秒。
-b: 以批量的方式执行top,通常会搭配> 文件 将结果输出到文件。
-n: 与-b搭配,表示需要执行及此top的输出结果。
-p: 指定某些个PID来执行查看监测。
man top可以查看更多说明。
查看某个进程的每隔2s的实时状态:top -d 2 -p PID
命令:
[root@iZ2ze3a5ws0mjxyxfspk8nZ ~]# $$ 表示查看当前bash的PID-bash: 2032576: command not found[root@iZ2ze3a5ws0mjxyxfspk8nZ ~]# top -d 2 -p 2032576
输出:
top - 17:56:18 up 53 days, 2:02, 1 user, load average: 0.04, 0.01, 0.00Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie%Cpu(s): 1.0 us, 1.0 sy, 0.0 ni, 97.5 id, 0.0 wa, 0.5 hi, 0.0 si, 0.0 stMiB Mem : 1968.8 total, 178.3 free, 1112.4 used, 678.1 buff/cacheMiB Swap:0.0 total,0.0 free,0.0 used. 705.5 avail MemPID USERPR NI VIRT RES SHR S %CPU %MEMTIME+ COMMAND2032576 root20 0 223360 4860 3424 S 0.0 0.2 0:00.03 bash
top输出信息说明:
第一行(top…):这一行显示的信息分别为:
- 目前的时间,即 17:56:18;
- 开机到目前为止所经过的时间,即up 53 days;
- 已经登录系统的用户人数,即 1 user;
- 系统在1,5,15分钟的平均任务负载。代表1,5,15分钟,系统平均要负责运行几个进程(任务)的意思。数值越小代表系统越闲置,若高于1就要注意你的系统进程是否太过于频繁了。
第二行(Task…):目前进程总量,和目前各状态下进程的数量统计;要注意最后那个zombie的那个数值,如果不是0,要排查的。
第三行(%Cpus…):显示CPU的整体负载。wa表示I/O wait
PR:Priority的简写 进程的优先执行顺序 越小越先被执行
NI:Nice的简写,与Priority有关,也是越小越先被执行
%CPU:CPU的使用率
%MEM:内存的使用率;
TIME+:CPU使用时间的累加;
top中的命令
top默认使用CPU使用率(%CPU)作为排序的依据。
如果想使用内存使用率排序,则可以按下M(注意大写的),若要恢复则按下P(也是大写的)。退出top,按下q。
排序的作用,比如:如果想要找出最消耗CPU资源的进程,使用top,然后top当中按下P,就可以很快知道。
我觉得 ps aux 和 top 可以类比为 cat 和 tail -f ,一个静态查看,一个动态查看。