第7章进程管理►1.什么是程序(Process):►1.1程序与执行文件(process&program)►1.2Linux的多人多任务环境►2.工作管理(jobcontrol):&,[ctrl]-z,jobs,fg,bg,kill►3.程序管理►3.1程序的观察:ps,top,pstree►3.2程序的删除:kill,killall►3.3系统资源的观察:free,uname,uptime,netstat,dmesg,sar►4.关于程序的执行顺序:nice,renice►5.特殊档案与程序:►5.1SUID/SGID/SBIT的概念►5.2/proc/*代表的意义►5.3查询已开启档案或已执行程序开启之档案:fuser,lsof,pidof进程与程序(process&program)►Linux底下执行一个指令时,系统会给予这个动作一个ID,我们称为PID。►根据启用这个指令的使用者与相关的指令功能,给予这个特定PID一组权限,该指令可以进行的行为则与这个PID的权限有关。►这就是为什么Linux这么多用户,但是每个人都可以拥有自己的环境了的原因。►每个程序都有三组的权限,每组都具有r/w/x的权限,所以:『不同的使用者身份执行这个program时,系统给予的权限也都不相同!』►利用touch来建立一个空的档案,当root执行这个touch指令时,他取得的是UID/GID=0/0的权限,而当dmtsai(UID/GID=501/501)执行这个touch时,他的权限就跟root不同父程序子程序►当我们登入系统后,会取得一个bash的shell,然后,我们用这个bash提供的接口去执行另一个指令,例如/usr/bin/passwd或者是touch等等,那些另外执行的指令也会被触发成为PID。►那个PID就是『子程序』了,bash环境,就称为『父程序』了!►:工作管理►(jobcontrol):&,[ctrl]-z,jobs,fg,bg,kill►这个工作管理(jobcontrol)是当我们登入系统取得bashshell之后,在单一终端机接口下同时进行多个工作的行为管理。►如下这一串指令中,重点在那个&的功能,表示将file1这个档案复制为file2,且放置于背景(后台)中执行,也就是说执行这一个命令之后,在这一个终端接口仍然可以做其它的工作!而当这一个指令(cpfile1file2)执行完毕之后,系统将会在您的终端接口显示完成的消息!►前景:您可以控制的这个工作称为前景的工作(foreground);►背景:在内存内可以自行运作的工作,无法直接控制他,除非以bg/fg等指令将该工作呼叫出来。工作管理的常用指令举例工作管理的限制►要进行bash的jobcontrol必须要注意到的限制是:►程序必须来是shell的childprocess►程序不能等待terminal/shell的输入(input)举例►我们要将/etc/整个备份成为/tmp/etc.tar.gz时,又不想要等待,那么可以这样做:►在输入一个指令后,在该指令的最后面加上一个『&』代表将该指令丢到背景中,此时bash会给予这个指令一个『工作号码(jobnumber)』,就是那个[1]啦!至于后面那个24874则是该指令所触发的『PID』jobs程序的观察程序的观察top►top也是程序观察工具,但不同于ps是静态的结果输出,top这个程序可以持续的监测(monitor)整个系统的程序工作状态。►例如下面的范例一,在预设的情况下,每次更新程序资源的时间为5秒,不过,可以使用-d来进行修改。top范例top范例top范例top范例►要找出最损耗CPU资源的那个程序时,大多使用的就是top这支程序啦!然后强制以CPU使用资源来排序(在top当中按下P即可),程序之间的相关性pstree系统资源的观察►ff网络监控►d查看系统信息dmesg常驻在内存当中的程序►系统每分钟都会去扫瞄/etc/crontab以及相关的设定档,来进行工作排程。那么那个工作排程是谁负责的?►是crond这个程序所管理的,它在后台持续不断的运作,套句以前DOS年代常常说的一句话,它是『常驻在内存当中的程序』►这些常驻在内存当中的程序有很多,不过主要大致分成系统本身所需要的服务,例如刚刚提到的crond及atd,还有syslog等等的。还有一些则是负责网络联机的服务,例如Apache,named,postfix,vsftpd...等等的。►这些网络服务程序被执行后,会启动一个可以负责网络监听的端口(port),以提供外部客户端(client)的联机要求。主要内容►进程和多进程的概念►进程类型►如何运行后台进程►如何进行进程控制7.1进程概述►进程(process):正运行的程序,即程序只有再被系统载入了内存并运行后才能够叫做进程。►程序是磁盘文件,而进程则是内存中工作着的代码。►获得当前运行的程序及其进程号:ps[user@hostname]$ps[参数]7.1.2进程间关系►复制机制来产生进程►进程关系:树形关系►每一个进程都记录了它的父进程和子进程的ID►进程结束之后退回到它的父进程►任何子进程都自动从父进程那里继承三个打开的设备文件:标准输入设备(键盘、鼠标):stdin(standardincoming,标准输入)标准输出设备(显示器等):stdout(standardoutputting,标准输出)做标准错误输出(stderr,standarderror)7.2进程类型►前台和后台进程前台:一个程序控制着标准输入输出后台:一个程序不从标准输入接受输入,一般也不将结果输出到标准输出►守护进程一般以后台进程的方式存在开机即被载入到系统中并常驻在系统中,直到关机时才结束,也被专称为“Daemon”,7.3进程控制命令►监视进程运行状态►在用户退出后让进程继续运行►更改进程的优先级►在进程有问题的时候杀死进程7.3.1监视进程►报告系统当前的进程状态:ps#ps[选项]ps命令输出字段含义字段名意义USER进程所有者的用户名PID进程号,可以唯一标识该进程%CPU进程自最近一次刷新以来所占用的CPU时间和总时间的百分比%MEM进程使用内存的百分比VSZ进程使用的虚拟内存大小,以K为单位RSS进程占用的物理内存的总数量,以K为单位TTY进程相关的终端STAT进程状态,用下表代码中的一个给出TIME进程使用的总CPU时间COMMAND被执行的命令行NI进程的优先级值,较小的数字意味着占用较少的CPU时间PRI进程优先级PPID父进程IDWCHAN进程等待的内核事件名进程状态符号含义R运行或准备运行S睡眠状态I空闲Z僵尸D不间断睡眠W进程没有驻留页T停止或跟踪7.3.2用户退出后继续运行进程►Nohup:让用户的程序在用户退出系统后继续运行[echo@echoecho]$nohupdir&[1]613[echo@echoecho]$nohup:appendingoutputto‘nohup.out’[1]+Donenohup.dir[echo@echoecho]$[echo@echoecho]$ls#*mail*#1565tBp#DesktopGraphicKDE1.gifRMAILbindustbinlsechonohup.outnotmalwork[echo@echoecho]$catnohup.out#*mail*#1565tBp#GraphicRMAILdustbinnormalDesktopKDE1.gitbinnohup.outwork7.3.3调整优先级►在启动进程时指定优先级nice–优先级改变量命令[参数][对象]&►进程运行时调整优先级renice优先级的改变量[PID][-u用户…][-pPID…][-gGID…]7.3.3终止进程►Ctrl+c:终止前台程序►kill:送一个结束进程的信号到某个当前运行的特定进程,从而结束进程#kill[选项][信号]进程号正常结束killPID强制结束kill-9PID7.4运行后台进程►使用&符号[echo@echoecho]$ls–Rdirlist&[1]561适合于:►程序运行途中不需要用户的干预►程序执行时间较长►使用nohupNohup命令[参数]输出文件&程序的优先级增加5►使用cron可以定时地、周期地执行程序主配置文件/etc/crontab►使用crontab描述传递给cron的执行程序格式:minutehourdaymonthdayofweekcommand保存在/var/spool/cron目录SHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/#run-parts01****rootrun-parts/etc/cron.hourly024***rootrun-parts/etc/cron.daily224**0rootrun-parts/etc/cron.weekly4241**rootrun-parts/etc/cron.monthly运行后台进程-2►使用anacron任务被列在配置文件/etc/anacrontab中。格式是:perioddelayjob-identifiercommand►使用atat时间命令1命令2命令3……►使用atq:列出用户未执行完的任务►使用atrm:删除后台执行的任务►使用batch:在系统负载允许的情况下执行命令小结&习题►思考题(1)什么是进程?(2)如何显示进程?(3)进程之间具有什么样的关系?(4)什么是多进程和多任务?►上机题(1)查看系统运行后台进程。(2)如何启动多个进程?(3)如何调整进程的优先级?