十、
进程管理
进程就是运行中的程序,一个运行着的程序,可能有多个进程。 比如
LinuxSir.Org
所用的
WWW
服务器是
apache
服务器,当管理员启动服务后,可能会有好多人来访问,也就是说许多用户来同时请
求
httpd
服务,
apache
服务器将会创建有多个
httpd
进程来对其进行服务。
1
、
进程分类
进程一般分为交互进程、批处理进程和守护进程三类。
值得一提的是守护进程总是活跃的,一般是后台运行,守护进程一般是由系统在开机时通过脚本自
动激活启动或超级管理用户
root
来启动。比如在
Fedora
或
Redhat
中,我们可以定义
httpd
服务器的启
动脚本的运行级别,此文件位于
/etc/init.d
目录下,文件名是
httpd
,
/etc/init.d/httpd
就是
httpd
服务器
的守护程序,当把它的运行级别设置为
3
和
5
时,当系统启动时,它会跟着启动。
[root@localhost ~]# chkconfig --level 35 httpd on
由于守护进程是一直运行着的,所以它所处的状态是等待请求处理任务。比如,我们是不是访问
LinuxSir.Org
,
LinuxSir.Org
的
httpd
服务器都在运行,等待着用户来访问,也就是等待着任务处理。
2
、进程的属性
进程
ID
(
PID)
:是唯一的数值,用来区分进程;
父进程和父进程的
ID
(
PPID)
;
启动进程的用户
ID
(
UID
)和所归属的组(
GID
);
进程状态:状态分为运行
R
、休眠
S
、僵尸
Z
;
进程执行的优先级;
进程所连接的终端名;
进程资源占用:比如占用资源大小(内存、
CPU
占用量);
3
、父进程和子进程
他们的关系是管理和被管理的关系,当父进程终止时,子进程也随之而终止。但子进程终止,父进
程并不一定终止。比如
httpd
服务器运行时,我们可以杀掉其子进程,父进程并不会因为子进程的终止
而终止。
在进程管理中,当我们发现占用资源过多,或无法控制的进程时,应该杀死它,以保护系统的稳定
安全运行
4
、进程管理命令
4.1
、
ps
ps
为我们提供了进程的一次性的查看,它所提供的查看结果并不动态连续的;如果想对进程时间监控,
应该用
top
工具。
4.1.1
、
ps
的参数说明:
ps
提供了很多的选项参数,常用的有以下几个;
l
长格式输出;
u
按用户名和启动时间的顺序来显示进程;
j
用任务格式来显示进程;
f
用树形格式来显示进程;
a
显示所有用户的所有进程(包括其它用户);
x
显示无控制终端的进程;
r
显示运行中的进程;
ww
避免详细参数被截断;
我们常用的选项是组合是
aux
或
lax
,还有参数
f
的应用;
ps aux
或
lax
输出的解释;
USER
表示启动进程用户。
PID
表示进程标志号。
%CPU
表示运行该进程占用
CPU
的时间与该进
程总的运行时间的比例。
%MEM
表示该进程占用内存和总内存的比例。
VSZ
表示占用的虚拟内存大
小,以
KB
为单位。
RSS
为进程占用的物理内存值,以
KB
为单位。
TTY
表示该进程建立时所对应的
终端,
"?"
表示该进程不占用终端。
STAT
表示进程的运行状态,包括以下几种代码:
D
,不可中断的
睡眠;
R
,就绪(在可运行队列中);
S
,睡眠;
T
,被跟踪或停止;
Z
,终止(僵死)的进程,
Z
不
存在,但暂时无法消除;
W
,没有足够的内存分页可分配;
<
高优先序的进程;
N
,低优先序的进程;
L
,有内存分页分配并锁在内存体内(实时系统或
I/O
)。
START
为进程开始时间。
TIME
为执行的时
间。
COMMAND
是对应的命令名。
4.1.2 ps
应用举例
实例一:
ps aux
最常用
[root@localhost ~]# ps -aux |more
可以用
|
管道和
more
连接起来分页查看;
[root@localhost ~]# ps aux > ps001.txt
[root@localhost ~]# more ps001.txt
这里是把所有进程显示出来,并输出到
ps001.txt
文件,然后再通过
more
来分页查看;
实例二:和
grep
结合,提取指定程序的进程;
[root@localhost ~]# ps aux |grep httpd
root 4187 0.0 1.3 24236 10272 ? Ss 11:55 0:00 /usr/sbin/httpd
apache 4189 0.0 0.6 24368 4940 ? S 11:55 0:00 /usr/sbin/httpd
apache 4190 0.0 0.6 24368 4932 ? S 11:55 0:00 /usr/sbin/httpd
apache 4191 0.0 0.6 24368 4932 ? S 11:55 0:00 /usr/sbin/httpd
apache 4192 0.0 0.6 24368 4932 ? S 11:55 0:00 /usr/sbin/httpd
apache 4193 0.0 0.6 24368 4932 ? S 11:55 0:00 /usr/sbin/httpd
apache 4194 0.0 0.6 24368 4932 ? S 11:55 0:00 /usr/sbin/httpd
apache 4195 0.0 0.6 24368 4932 ? S 11:55 0:00 /usr/sbin/httpd
apache 4196 0.0 0.6 24368 4932 ? S 11:55 0:00 /usr/sbin/httpd
root 4480 0.0 0.0 5160 708 pts/3 R+ 12:20 0:00 grep httpd
实例二:父进和子进程的关系友好判断的例子
[root@localhost ~]# ps auxf |grep httpd
root 4484 0.0 0.0 5160 704 pts/3 S+ 12:21 0:00 \_ grep
httpd
root 4187 0.0 1.3 24236 10272 ? Ss 11:55 0:00 /usr/sbin/httpd
apache 4189 0.0 0.6 24368 4940 ? S 11:55 0:00 \_ /usr/sbin/httpd
apache 4190 0.0 0.6 24368 4932 ? S 11:55 0:00 \_ /usr/sbin/httpd
apache 4191 0.0 0.6 24368 4932 ? S 11:55 0:00 \_ /usr/sbin/httpd
apache 4192 0.0 0.6 24368 4932 ? S 11:55 0:00 \_ /usr/sbin/httpd
apache 4193 0.0 0.6 24368 4932 ? S 11:55 0:00 \_ /usr/sbin/httpd
apache 4194 0.0 0.6 24368 4932 ? S 11:55 0:00 \_ /usr/sbin/httpd
apache 4195 0.0 0.6 24368 4932 ? S 11:55 0:00 \_ /usr/sbin/httpd
apache 4196 0.0 0.6 24368 4932 ? S 11:55 0:00 \_ /usr/sbin/httpd
这里用到了
f
参数;父与子关系一目了然;
例三:找出消耗内存最多的前
10
名进程
# ps -auxf | sort -nr -k 4 | head -10
例四:找出使用
CPU
最多的前
10
名进程
# ps -auxf | sort -nr -k 3 | head -10
4.2
、
pstree
功能:
pstree
命令列出当前的进程,以及它们的树状结构。
格式:
pstree [
选项
] [pid|user]
主要选项如下:
-a
:显示执行程序的命令与完整参数。
-c
:取消同名程序,合并显示。
-h
:对输出结果进行处理,高亮显示正在执行的程序。
-l
:长格式显示。
-n
:以
PID
大小排序。
-p
:显示
PID
。
-u
:显示
UID
信息。
-G
:使用
VT100
终端编码显示。
-U
:使用
UTF-8
(
Unicode
)编码显示。
说明:使用
ps
命令得到的数据精确,但数据庞大,这一点对掌握系统整体概况来说是不容易的。
pstree
正好可以弥补这个缺憾。它能将当前的执行程序以树状结构显示。
pstree
支持指定特定程序(
PID
)
或使用者(
USER
)作为显示的起始。
应用实例如下。
进程启动的时候可能会产生自己的一个子进程。运行
pstree
命令就可以很容易地看到这些信息。以超
级用户权限运行
pstree
:
命令对程序名称相同的会自动合并,所有
"|-httpd---8*[httpd]"
即表示系统中有
8
个
httpd
进程产生的
子进程。
4.3
、
top
top
命令用来显示系统当前的进程状况。
格式:
top [
选项
]
主要选项如下。
d
:指定更新的间隔,以秒计算。
q
:没有任何延迟的更新。如果使用者有超级用户,则
top
命令将会以最高的优先序执行。
c
:显示进程完整的路径与名称。
S
:累积模式,会将已完成或消失的子进程的
CPU
时间累积起来。
s
:安全模式。
i
:不显示任何闲置(
Idle
)或无用(
Zombie
)的进程。
n
:显示更新的次数,完成后将会退出
top
。
说明:
top
命令和
ps
命令的基本作用是相同的,都显示系统当前的进程状况。但是
top
是一个动态显
示过程,即可以通过用户按键来不断刷新当前状态。这里结合下图来说明它给出的信息。
第一行表示的项目依次为当前时间、系统启动时间、当前系统登录用户数目、平均负载。
第二行显示的是
Tasks: 114 total
进程总数、
2 running
正在运行的进程数、
110 sleeping
睡眠的进程数、
0 stopped
停止的进程数、
2 zombie
僵尸进程数
第三行显示的是目前
CPU
的使用情况,
Cpu(s): 0.3% us
用户空间占用
CPU
百分比、
1.0% sy
内核空间
占用
CPU
百分比、
0.0% ni
用户进程空间内改变过优先级的进程占用
CPU
百分比、
98.7% id
空
闲
CPU
百分比、
0.0% wa
等待输入输出的
CPU
时间百分比、
0.0% hi
、
0.0% si
第四行显示物理内存的使用情况,
Mem: 191272k total
物理内存总量、
173656k used
使用的物理内存
总量、
17616k free
空闲内存总量、
22052k buffers
用作内核缓存的内存量
第五行显示交换分区使用情况,
Swap: 192772k total
交换区总量、
0k used
使用的交换区总量、
192772k
free
空闲交换区总量、
123988k cached
缓冲的交换区总量、内存中的内容被换出到交换区,
而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的
交换区的大小。相应的内存再次被换出时可不必再对交换区写入。
第六行显示的项目最多,下面列出了详细解释。
PID
(
Process ID
):进程标志号,是非零正整数。
USER
:进程所有者的用户名。
PR
:进程的优先级别。
NI
:进程的优先级别数值。
VIRT
:进程占用的虚拟内存值。
RES
:进程占用的物理内存值。
SHR
:进程
使用的共享内存值。
STAT
:进程的状态,其中
S
表示休眠,
R
表示正在运行,
Z
表示僵死状态,
N
表
示该进程优先值是负数。
%CPU
:该进程占用的
CPU
使用率。
%MEM
:该进程占用的物理内存和总内
存的百分比。
TIME
:该进程启动后占用的总的
CPU
时间。
COMMAND
:进程启动的启动命令名称,如
果这一行显示不下,进程会有一个完整的命令行。
top
命令使用过程中,还可以使用一些交互的命令来完成其他参数的功能。这些命令是通过快捷键启
动的。
<
空格
>
:立刻刷新。
A
分类显示系统不同资源的使用大户。有助于快速识别系统中资源消耗多的任务。
f
添加删除所要显示栏位
.
o
调整所要显示栏位的顺序
.
r
调整一个正在运行的进程
Nice
值
.
k
结束一个正在运行的进程
.
z
彩色
/
黑白显示开关
P
:根据
CPU
使用大小进行排序。
T
:根据时间、累计时间排序。
q
:退出
top
命令。
m
:切换显示内存信息。
t
:切换显示进程和
CPU
状态信息。
c
:切换显示命令名称和完整命令行。
M
:根据使用内存大小进行排序。
W
:将当前设置写入~
/.toprc
文件中。这是写
top
配置文件的推荐方法。
可以看到,
top
命令是一个功能十分强大的监控系统的工具,对于系统管理员而言尤其重要。但是,
它的缺点是会消耗很多系统资源。