利用静态的 ps 或者是动态的 top,还能以 pstree 来查阅程序树之间的关系
- ps :将某个时间点的程序运行情况撷取下来
[root@www ~]# ps aux <==观察系统所有的程序数据 [root@www ~]# ps -lA <==也是能够观察所有系统的数据 [root@www ~]# ps axjf <==连同部分程序树状态直接背两个比较不同的选项, 一个是只能查阅自己 bash 程序的『 ps -l 』一个则是可以查阅所有系统运行的程序『 ps aux 』!
- 仅观察自己的 bash 相关程序: ps -l
范例一:将目前属於您自己这次登陆的 PID 与相关资讯列示出来(只与自己的 bash 有关) [root@www ~]# ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 0 13639 13637 0 75 0 - 1287 wait pts/1 00:00:00 bash 4 R 0 13700 13639 0 77 0 - 1101 - pts/1 00:00:00 ps |
系统整体的程序运行是非常多的,但如果使用 ps -l 则仅列出与你的操作环境 (bash) 有关的程序而已,亦即最上一级的父程序会是你自己的 bash 而没有延伸到 init 这支程序去!那么 ps -l 秀出来的数据有哪些呢?我们就来观察看看:
- F:代表这个程序旗标 (process flags),说明这个程序的总结权限,常见号码有:
- 若为 4 表示此程序的权限为 root ;
- 若为 1 则表示此子程序仅进行复制(fork)而没有实际运行(exec)。
- S:代表这个程序的状态 (STAT),主要的状态有:
- R (Running):该程序正在运行中;
- S (Sleep):该程序目前正在睡眠状态(idle),但可以被唤醒(signal)。
- D :不可被唤醒的睡眠状态,通常这支程序可能在等待 I/O 的情况(ex>列印)
- T :停止状态(stop),可能是在工作控制(背景暂停)或除错 (traced) 状态;
- Z (Zombie):僵尸状态,程序已经终止但却无法被移除至内存外。
- UID/PID/PPID:代表『此程序被该 UID 所拥有/程序的 PID 号码/此程序的父程序 PID 号码』
- C:代表 CPU 使用率,单位为百分比;
- PRI/NI:Priority/Nice 的缩写,代表此程序被 CPU 所运行的优先顺序,数值越小代表该程序越快被 CPU 运行。详细的 PRI 与 NI 将在下一小节说明。
- ADDR/SZ/WCHAN:都与内存有关,ADDR 是 kernel function,指出该程序在内存的哪个部分,如果是个 running的程序,一般就会显示『 - 』 / SZ 代表此程序用掉多少内存 / WCHAN 表示目前程序是否运行中,同样的,若为 - 表示正在运行中。
- TTY:登陆者的终端机位置,若为远程登陆则使用动态终端介面 (pts/n);
- TIME:使用掉的 CPU 时间,注意,是此程序实际花费 CPU 运行的时间,而不是系统时间;
- CMD:就是 command 的缩写,造成此程序的触发程序之命令为何。
范例五:找出与 cron 与 syslog 这两个服务有关的 PID 号码? [root@www ~]# ps aux | egrep '(cron|syslog)' root 4286 0.0 0.0 1720 572 ? Ss Mar11 0:00 syslogd -m 0 root 4661 0.0 0.1 5500 1192 ? Ss Mar11 0:00 crond root 14286 0.0 0.0 4116 592 pts/1 R+ 16:15 0:00 egrep (cron|syslog) # 所以号码是 4286 及 4661 这两个罗!就是这样找的啦!
除此之外,我们必须要知道的是『僵尸 (zombie) 』程序是什么?通常,造成僵尸程序的成因是因为该程序应该已经运行完毕,或者是因故应该要终止了,但是该程序的父程序却无法完整的将该程序结束掉,而造成那个程序一直存在内存当中。如果你发现在某个程序的 CMD 后面还接上 <defunct> 时,就代表该程序是僵尸程序啦,例如:
apache 8683 0.0 0.9 83384 9992 ? Z 14:33 0:00 /usr/sbin/httpd <defunct>