查看系统上正在运行的进程,可以利用静态的 ps 或者是动态的 top;静态即截取某一时刻的状态,动态即处于持续检测进程运行的状态。
1、静态的ps
ps:将某个时间点的进程运行情况选取下来;
[root @www ~]# ps aux <==查看系统所有的进程数据
[root @www ~]# ps -lA <==也是能够查看所有系统的数据
[root @www ~]# ps axjf <==连同部分进程树状态
参数:
-A:所有的进程均显示出来,与 -e 具有同样的作用;
-a:不与 terminal 有关的所有进程;
-u:有效用户(effective user)相关的进程;
x :通常与 a 这个参数一起用,可列出比较完整的信息。
输出格式规划:
l :较长、较详细地将该 PID 的信息列出。
j :工作的格式(jobs format);
-f:做一个更为完整的输出;
1.1仅查看自己的 bash 相关进程:ps -l
范例一:将目前属于你自己这次登录的 PID 与相关信息列出来
biaoshuai@biaoshuai-virtual-machine:~/apue/server-client$ ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 2698 2693 0 80 0 - 7526 wait pts/2 00:00:00 bash
0 T 1000 3465 2698 0 80 0 - 76933 signal pts/2 00:00:00 vi
4 R 1000 7101 2698 0 80 0 - 8996 - pts/2 00:00:00 ps
- 系统整体的进程运行时非常多的,但如果使用 ps -l 则仅列出与你的操作环境有关的进程而已,即最上层的父进程会是你自己的 bash 而没有扩展到 init 这个进程去,那么 ps -l 显示出来的数据有哪些呢?
F:代表这个进程标志,说明这个进程的权限:
4(表示此进程的权限为root)
1(表示此子进程仅可进行复制而无法实际执行)。
S:代表这个进程的状态,主要状态有:
R(该进程正在运行中);
S(睡眠状态,但可以被唤醒);
D(不可被唤醒的睡眠状态,通常这个进程可能在等待 I/O 的情况);
T(停止状态,可能是在工作控制或除错状态);
Z(“僵尸”状态,进程已终止但无法被删除至内存外);
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 的缩写,造成此程序的触发进程的命令为何。
- 所以你看到的 ps -l 输出信息中,它说明的是bash 的程序属于 UID 为0 的用户,状态为睡眠,之所以为睡眠因为它触发了 ps 之故。此进程的 PID 为13639,优先执行顺序为 75,执行 bash 所取得的终端接口为 pts/1,运行状态为等待。
1.2查看系统所有进程:ps aux
范例二:列出目前所有的正在内存当中的进程:
biaoshuai@biaoshuai-virtual-machine:~/apue/server-client$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 185200 3528 ? Ss 10:07 0:03 /sbin/init spl
root 2 0.0 0.0 0 0 ? S 10:07 0:00 [kthreadd]
root 4 0.0 0.0 0 0 ? S< 10:07 0:00 [kworker/0:0H]
root 6 0.0 0.0 0 0 ? S< 10:07 0:00 [mm_percpu_wq]
root 7 0.0 0.0 0 0 ? S 10:07 0:00 [ksoftirqd/0]
....
- 你会发现 ps -l 与 ps aux 显示的项目并不相同!在 ps aux 显示的项目中,各字段的意义为:
USER:该进程属于哪个用户账户;
PID:该进程的进程标识符;
%CPU:该进程用掉的 CPU 资源百分比;
%MEM:该进程所占用的物理内存百分比;
VSZ:该进程使用掉的虚拟内存量;
RSS:该进程占用的固定的内存量;
TTY:该进程是在哪个终端机上面运行,若与终端机无关则显示 ‘?’另外,tty1-tty6 是本机上面的登录者程序,若为 pst/0 等的,则表示为由网络连接进主机的进程;
STAT:该进程目前的状态,状态显示与 ps -l 的 S 标识相同;
START:该进程被触发启动的时间;
TIME:该进程实际使用 CPU 运行的时间;
COMMAND:该进程的实际命令。
上面提到的僵尸进程是什么呢?通常,造成僵尸进程的成因是因为该进程应该已经执行完毕,或者是因故应该要终止了,但是该进程的父进程却无法完成将该进程结束掉,而造成那个进程一直存在内存当中。
当系统不稳定的时候就容易造成所谓的僵尸进程,可能是因为程序写得不好,或者是用户的操作习惯不良等所造成的。
2、top:动态查看进程的变化
相对于 ps 是选取一个时间点的进程状态,top 则可以持续检测进程运行的状态。使用方式如下:
[root @www ~]# top [-d 数字] | top [-bnp]
参数:
-d:后面可以接秒数,就是整个进程界面更新的秒数。默认是 5 秒。
-b:以批次的方式执行 top,还有更多的参数可以使用。通常会搭配数据流重定向来将批处理的结果输出成为文件。
-n:与 -b 搭配,意义是,需要进行几次 top 的输出结果。
-p:指定某些个 PID 来进行查看监测而已。
在 top 执行过程中,可以使用的按键命令:
?:显示在 top 当中可以输入的按键命令;
P:以CPU 的使用资源排序显示;
M:以内存的使用资源排序显示;
N:以 PID 来排序;
T:由该进程使用的 CPU 时间积累排序;
k:给予某个 PID 一个信号;
r:给予某个 PID 重新制定一个 nice 值;
q:离开 top 软件的按键。
其实top 的功能巨多,可用按键也非常多。可以参考 man top 的内部说明文件。
范例一:每两秒更新一次 top ,查看整体信息:
biaoshuai@biaoshuai-virtual-machine:~/apue/server-client$ top -d 2
top - 15:10:48 up 3:50, 1 user, load average: 0.12, 0.06, 0.01
Tasks: 232 total, 1 running, 229 sleeping, 1 stopped, 1 zombie
%Cpu(s): 5.1 us, 3.6 sy, 0.0 ni, 89.5 id, 1.5 wa, 0.0 hi, 0.3 si, 0.0 st
KiB Mem : 985888 total, 76132 free, 671320 used, 238436 buff/cache
KiB Swap: 1046524 total, 414972 free, 631552 used. 98548 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1061 root 20 0 492588 24976 12496 S 6.5 2.5 0:34.60 Xorg
2693 biaoshu+ 20 0 617896 17492 11548 S 4.5 1.8 0:07.32 gnome-ter+
2255 biaoshu+ 20 0 1383812 33316 19512 S 4.0 3.4 0:50.44 compiz
显示的内容依序是:
第一行:
- 目前的开机时间,即是
- 开机到目前索所经过的时间
- 已登录系统的用户人数,亦即 1user 选项;
- 系统在 1,5,15 分钟的平均工作负载
第二行: 显示的是目前进程的总量与个别进程在什么状态。比较需要注意的是zombie 那个数值,如果不是 0,好好看看哪个 process 变成僵尸了吧。
第三行:显示的是 CPU 的整体负载,每个选项可使用 ? 查阅。需要特别注意的是 %wa,那个选项代表的是 I/Owait, 通常你的系统变慢都是 I/O 产生的问题比较大!
第四行和第五行:表示目前的物理内存与虚拟内存的使用情况。
第六行:这个是当在 top 进程当中输入命令时显示状态的地方。
至于top下半部分的界面,则是每个进程使用的资源情况。
PID:每个进程的ID;
USER:该进程所属用户
PR:Priority的简写,进程的优先持续顺序,越小越早被持行。
NI:nice的缩写,与priority有关,也是越小越早被执行;
%CPU:CPU的使用率
%MEM:内存的使用率
TIME+:CPU使用时间的累加。
top默认使用 CPU 使用率(%CPU)作为排序的重点,如果你想要使用内存使用率排序,则可以按下“M”,若要恢复则按下“P”即可;
范例二:将 top 的信息进行 2 次,然后将结果输出到 /tmp/top.txt
biaoshuai@biaoshuai-virtual-machine:~$ top -b -n 2 > /tmp/top.txt
一般来说,如果想要找出最损耗 CPU 资源的那个进程,大多使用的就是top 这个程序。