07进程管理.docx
《07进程管理.docx》由会员分享,可在线阅读,更多相关《07进程管理.docx(11页珍藏版)》请在冰豆网上搜索。
07进程管理
进程管理
Linux是一种动态系统,能够适应不断变化的计算需求。
Linux计算需求的表现是以进程通用抽象为中心的。
进程可以是短期的(从命令行执行的一个命令),也可以是长期的(一种网络服务)。
因此,对进程及其调度进行一般管理就显得极为重要,计算机进程:
就是计算机此时正在运行的程序。
一、基本概念
1、进程分类
Linux操作系统包括三种不同类型的进程它们是:
交互进程、批处理进程和守护进程。
每种进程都有自己的特点和属性。
交互进程是由一个Shell启动的进程。
交互进程:
既可以在前台运行,也可以在后台运行。
批处理进程:
和终端没有联系,是一个进程序列。
系统守护:
进程是Linux系统启动时启动的进程,并在后台运行。
说明:
守护进程总是活跃的,一般是后台运行,守护进程一般是由系统在开机时通过脚本自动激活启动或超级管理用户root来启动。
比如在Fedora中,我们可以定义httpd服务器的启动脚本的运行级别,此文件位于/etc/init.d目录下,文件名是httpd,/etc/init.d/httpd就是httpd服务器的守护程序,当把它的运行级别设置为3和5时,当系统启动时,它会跟着启动。
由于守护进程是一直运行着的,所以它所处的状态是等待请求处理任务。
2进程的属性
进程ID(PID):
是唯一的数值,用来区分进程。
父进程和父进程的ID(PPID);
启动进程的用户ID(UID)和所归属的组(GID);
进程状态:
状态分为运行R、休眠S、僵尸Z;
进程执行的优先级;
进程所连接的终端名;
进程资源占用:
比如占用资源大小(内存、CPU占用量);
3、父进程和子进程
他们的关系是管理和被管理的关系,当父进程终止时,子进程也随之而终止。
但子进程终止,父进程并不一定终止。
比如httpd服务器运行时,我们可以杀掉其子进程,父进程并不会因为子进程的终止而终止(例如:
httpd进程的nobody用户子进程)。
在进程管理中,当我们发现占用资源过多,或无法控制的进程时,应该杀死它,以保护系统的稳定安全运行。
4、进程管理
Linux管理进程的最好方法就是使用命令行下的系统命令。
Linux下面的进程涉及的命令有比如ps、kill、grep等工具。
二、监视进程命令
1、ps(processstatus命令)
使用方式:
ps[options][--help]
功能说明:
显示瞬间进程(process)的动态
主要参数:
ps的参数非常多,在此仅列出几个常用的参数并大略介绍含义
-A列出所有的进程
-w显示加宽可以显示较多的资讯
-au显示较详细的资讯
-aux显示所有包含其他使用者的进程
范例:
ps如下图:
表示的顺序为:
进程标号、设备、状态、启动时间、命令。
2、pstree命令
使用方式:
pstree[-a][-c][-h|-Hpid][-l][-n][-p][-u][-G|-U][pid|user]
pstree-V
功能说明:
将所有进程以树状图显示,树状图将会以pid(如果有指定)或是以init这个基本进程为根(root),如果有指定使用者id,则树状图会只显示该使用者所拥有的进程
主要参数:
-a显示该进程的完整指令及参数,如果是被记忆体置换出去的进程则会加上括号。
-c如果有重覆的进程名,则分开列出(预设值是会在前面加上*)。
范例:
pstree如下图:
说明:
命令对程序名称相同的会自动合并,所有"|-auto---4*[{automount}]"即表示系统中有4个automount进程产生的子进程。
3、top命令
使用方式:
top[-][ddelay][q][c][S][s][i][n][b]
功能说明:
实时显示process的动态
主要参数:
d:
改变显示的更新速度,或是在交谈式指令列(interactivecommand)按s
q:
没有任何延迟的显示速度,如果使用者是有superuser的权限,则top将会以最高的优先序执行
c:
切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称S:
累积模式,会将己完成或消失的子进程(deadchildprocess)的CPUtime累积起来
s:
安全模式,将交谈式指令取消,避免潜在的危机
i:
不显示任何闲置(idle)或无用(zombie)的进程
n:
更新的次数,完成后将会退出top
b:
批次档模式,搭配"n"参数一起使用,可以用来将top的结果输出到档案内
范例:
显示更新十次后退出;top-n10如下图:
使用者将不能利用交谈式指令来对进程下命令:
top-s如下图:
PID(ProcessID):
进程标志号,是非零正整数。
USER:
进程所有者的用户名。
PR:
进程的优先级别。
NI:
进程的优先级别数值。
VIRT:
进程占用的虚拟内存值。
RES:
进程占用的物理内存值。
SHR:
进程使用的共享内存值。
STAT:
进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数。
%CPU:
该进程占用的CPU使用率。
%MEM:
该进程占用的物理内存和总内存的百分比。
TIME:
该进程启动后占用的总的CPU时间。
COMMAND:
进程启动的启动命令名称,如果这一行显示不下,进程会有一个完整的命令行。
三、使用kill命令控制进程
使用方式:
kill[-s<信息名称或编号>][程序] 或 kill[-l<信息编号>]
功能说明:
删除执行中的程序或工作。
kill可将指定的信息送至程序,预设的信息为SIGTERM(15),可将指定程序终止。
若仍无法终止该程序,可使用SIGKILL(9)信息尝试强制删除程序。
程序或工作的编号可利用ps指令或jobs指令查看。
主要参数:
-l<信息编号> 若不加<信息编号>选项,则-l参数会列出全部的信息名称。
-s<信息名称或编号> 指定要送出的信息。
说明:
进程是Linux系统中一个非常重要的概念。
Linux是一个多任务的操作系统,系统上经常同时运行着多个进程。
我们不关心这些进程究竟是如何分配的,或者是内核如何管理分配时间片的,所关心的是如何去控制这些进程,让它们能够很好地为用户服务。
kill命令的工作原理:
向Linux系统的内核发送一个系统操作信号和某个程序的进程标识号,然后系统内核就可以对进程标识号指定的进程进行操作。
例如在top命令中,我们看到系统运行许多进程,有时就需要使用kill中止某些进程来提高系统资源。
在讲解安装和登陆命令时,曾提到系统多个虚拟控制台的作用是当一个程序出错造成系统死锁时,可以切换到其它虚拟控制台工作关闭这个程序。
此时使用的命令就是kill,因为kill是大多数Shell内部命令可以直接调用的。
实例:
使用kill命令
第一步:
执行find命令(#findasdfg/)。
说明:
很费时间的命令。
第二步:
查看find对应的进程号。
(psaux|grepfind)如图:
显示地项目共分为四项,依次为PID(进程ID)、TTY(终端名称)、TIME(进程执行时间)、COMMAND(该进程地命令行输入)。
第三步:
使用kill杀死find进程(#kill8269)。
四、进程优先级设定(nice命令)
使用方式:
nice[-nadjustment][-adjustment][--adjustment=adjustment][--help][--version][command[arg...]
功能说明:
以更改过的优先序来执进程序,如果未指定程序,则会显示出目前的排程优先序,内定的adjustment为10,范围为-20(最高优先序)到19(最低优先序)
主要参数:
-nadjustment,-adjustment,--adjustment=adjustment皆为将该原有优先序的增加adjustment
--help显示求助讯息
--version显示版本资讯
范例:
将ls的优先序加1并执行:
nice-n1ls
注意:
优先序(priority)为操作系统用来决定CPU分配的参数,Linux使用『回合制(round-robin)』的演算法来做CPU排程,优先序越高,所可能获得的CPU时间就越多。
五、定期或规定时间内执行Linux程序(crontab和at命令)
1、定期时间内执行Linux程序(crontab)
使用方式:
crontab[-uuser]file
crontab[-uuser]{-l|-r|-e}
功能说明:
crontab是用来让使用者在固定时间或固定间隔执进程序之用,换句话说,也就是类似使用者的时程表。
-uuser是指设定指定user的时程表,这个前提是你必须要有其权限(比如说是root)才能够指定他人的时程表。
如果不使用-uuser的话,就是表示设定自己的时程表。
主要参数:
-e:
执行文字编辑器来设定时程表,内定的文字编辑器是VI,如果你想用别的文字编辑器,则请先设定VISUAL环境变数来指定使用那个文字编辑器(比如说setenvVISUALjoe)
-r:
删除目前的时程表
-l:
列出目前的时程表
时程表的格式如下:
f1f2f3f4f5program
其中f1是表示分钟,f2表示小时,f3表示一个月份中的第几日,f4表示月份,f5表示一个星期中的第几天。
program表示要执行的程序。
当f1为*时表示每分钟都要执行program,f2为*时表示每小时都要执进程序,其馀类推
当f1为a-b时表示从第a分钟到第b分钟这段时间内要执行,f2为a-b时表示从第a到第b小时都要执行,其馀类推
当f1为*/n时表示每n分钟个时间间隔执行一次,f2为*/n表示每n小时个时间间隔执行一次,其馀类推
当f1为a,b,c,...时表示第a,b,c,...分钟要执行,f2为a,b,c,...时表示第a,b,c...个小时要执行,其馀类推。
说明:
使用者也可以将所有的设定先存放在档案file中,用crontabfile的方式来设定时程表。
使用crontab步骤:
第一:
启动crond服务:
#servicecrondstart|stop|restart|reload
第二:
编辑iptables文件
#crontab/root/desktop/iptables.cron
第三:
创建crontab
#crontabcrontabfile
或#crontab-e
例子1:
每月每天每小时的第0分钟执行一次/bin/ls:
0****/bin/ls
例子2:
在12月内,每天的早上6点到12点中,每隔20分钟执行一次/usr/bin/backup:
06-12/3*12*/usr/bin/backup
注意:
当程序在你所指定的时间执行后,系统会寄一封信给你,显示该程序执行的内容,若是你不希望收到这样的信,请在每一行空一格之后加上>/dev/null2>&1即可。
2、规定时间内执行Linux程序(at命令)
使用方式:
at-V[-qqueue][-ffile][-mldbv]TIME
功能说明:
at可以让使用者指定在TIME这个特定时刻执行某个程序或指令,TIME的格式是HH:
MM其中的HH为小时,MM为分钟,甚至你也可以指定am,pm,midnight,noon,。
使用者也可指定today或tomorrow来表示今天或明天。
当指定了时间并按下enter之后,at会进入交谈模式并要求输入指令或程序,当你输入完后按下ctrl+D即可完成所有动作,至于执行的结果将会寄回你的帐号中。
主要参数:
-V:
印出版本编号
-q:
使用指定的储列(Queue)来储存,at的资料是存放在所谓的queue中,使用者可以同时使用多个queue,而queue的编号为a,b,c...z以及A,B,...Z共52个
-m:
即使程序/指令执行完成后没有输出结果,也要寄封信给使用者
-ffile:
读入预先写好的命令档。
使用者不一定要使用交谈模式来输入,可以先将所有的指定先写入档案后再一次读入
-l:
列出所有的指定(使用者也可以直接使用atq而不用at-l)
-d:
删除指定(使用者也可以直接使用atrm而不用at-d)
-v:
列出所有已经完成但尚未删除的指定
例子1:
三天后的下午5点钟执行/bin/ls:
at5pm+3days/bin/ls
例子2:
三个星期后的下午5点钟执行/bin/ls:
at5pm+2weeks/bin/ls
例子3:
明天的17:
20执行/bin/date:
at17:
20tomorrow/bin/date
例子4:
1999年的最后一天的最后一分钟印出theendofworld!
at23:
5912/31/1999echotheendofworld!
例子5:
在规定时间内执行桌面at.txt文件
#at9:
204/13/2011
at>touch/root/desktop/at.txt
at>按Ctrl+D实现。
六、其它系统管理命令
顺序
命令
语法
功能
主要选项
1
man
man[-k][command_name]
显示参考手册,提供联机帮助信息。
-k表示指定关键字查询的有关命令。
2
uname
umane[选项]
显示目前的版本信息。
[-a|m|n|r|s|v|help|version]
3
date
date[选项]
可以用来显示或设定系统的日期与时间。
[-d|help|s|u|-version]
4
cal
cal[选项][月][年]
显示某年某月的日历。
-j显示第几天;-y显示整年日历
5
pwd
pwd
显示目前所在目录。
6
free
free[选项]
显示内存状态。
[-b|k|m|o|s|t|V]
7
last
last[选项][账号][终端]
列出目前与过去系统登录用户信息。
[-a|d|f|n|R|x]
8
shutdown
shutdown[选项][时间][警告信息]
系统关机命令。
[-c|f|F|h|k|n|r|t]
9
halt
halt[选项]
选择性关闭系统命令
[-d|f|i|n|p|w]
10
reboot
rebioot[选项]
重新开机命令。
[-d|f|i|n|w]
11
init
initstate
改变系统状态。
[0-6|s/S]
12
runlevel
runlevel
查看当前系统所处运行状态
13
login
login
注册进入系统。
14
logout
logout
用户注销。