第九章、进程与日志管理一、进程管理基本概念○1、进程的概念——·进程是处于活动状态的计算机程序。·进程是一个随执行过程不断变化的实体。○2、进程与程序之间的关系——·进程是程序的一次运行活动,属于一种动态概念。·一个进程可以执行一个多个程序。·几个进程也可以同时使用一个程序的副本。·程序可以作为一种软件资源长期保持着,而进程则是一次性过程。○3、进程的分类——·交互式进程(如:vi、less等等)·批处理进程(如:不加-i选项的cp、cat等一些敲击完命令后,回到“#”的状态)·守护进程(如:vsftpd、httpd等一些服务)○4、前台与后台——·前台是指一个程序控制着标准输出和标准输入。·后台就是指一个程序不从标准输入接受输入,也不将结果输出到标准输出上。1、进程管理○1、查看进程——(ps)(top)·◇1、ps——获得当前进程数据。#ps[选项]……常用选项:(这里的选项不带“-”也可以。有的地方加上“-”不行。-a——列出带有控制终端的全部进程,不仅仅是当前用户的进程。-r——只列出正在运行的进程。-x——列出没有控制终端的那些进程。-u——列出进程的所有者。-f——给出进程之间的父/子关系。-l——按长格式显示清单。w——显示进程的命令行参数。-o——用户自定义每行所显示的内容。ps——命令最常用的选项组合是“-aux”,每个进程的信息为一行,每行11个字段:每段定义如下:USER:进程的所有者。PID:进程的标识号码。%CPU:进程占用CPU的百分比。对于一个多处理器系统来说,这一个数字相加的结果可能会大于%100。%MEM:进程占用内存的百分比。VSZ:进程占用虚拟内存的数量。RSS:进程占用真实(驻留)内存的总量。TTY:进程的控制端。在这一列中出现“?”意味着这个进程不与某个控制终端相关联。STAT:进程的状态。主要包括以下参数——S——指进程休眠中。所有准备运行的进程(即那些被安排为多任务的进程,但是CPU当前正在处理其他事情)都是休眠状态的。R——CPU正在处理的进程。D——指不可中断休眠状态(通常与输入输出有关)。T——指正在被纠错程序跟踪或者已经被终止的进程。Z——指“僵死”的进程。它的意思是:(1)父进程没有使用wait系统使用调用通知它的子进程的终止;(2)父进程被非正常终止:但是在该父进程完全终止前,init进程无法管理其子进程本身。一个“僵死”的进程通常都一位着软件编写的不好。另外每个进程的STAT进程数据选项还有如下的说明符:W=内存中没有驻留页面(它已经全部交换出内存);=高优先权进程;N=第优先权进程;L=内存页面被锁定在那里(通常就表示需要实时操作功能)。START:进程开始的时间。TIME:进程已经使用CPU的时间。COMMAND:进程名称和它的命令行参数。例1:如果打算获得进程之间的父子关系,可以加如f选项的ps命令,也可以在后面跟上只是自己希望了解看到的参数,也直接跟上,多个之间用逗号隔开。#psfouser,pid,tty,command·2、(top)——动态显示当前进程和其他状况。#top[选项]……常用选项:-d——指定每次屏幕信息刷新之间的时间间隔。-c——显示整个命令行,而不是显示命令名。例1:top命令执行后会产生交互的绘画状态,默认值是每3秒刷新一次。#top解释——在进程的表单上有5行:第一行的项目依次为:(当前时间)、(系统从启动到现在的时间)、(当前系统用户登录数目)、(平均负载,最近一秒、5秒、15秒的负载值)。第二行为进程情况,依次为:(进程总数)、(正在运行进程数)、(休眠进程数)、(终止进程数)、(僵死进程数)。第三行为CPU状态,依次为:(用户占用)、(系统占用)、(优先进程占用)、(闲置等各种情况占用CPU时间的百分比)。第四行为内存状态,依次为:(总的可用内存)、(已用内存)、(空闲内存)、(缓存使用内存)。第五行为交换状态,依次为:(总的可用交换容量)、(已用容量)、(闲置容量)、缓存容量)。接下来就是与ps相仿的个进程情况了:PID:每个进程的ID。USER:每个进程所有者的用户名。PR:该进程的优先级别,用正整数表示。数值越低,优先级越高。NI:nice值。nice值是进程的一个属性,PR是根据nice值排序的,规则是nice值越小PR值越低,其取值范围在(-20——19)之间。VIRT:一个进程的虚拟大小,指的是该进程总共的内存使用量。这包含有:被指定给它的内存;它使用的档案所用的内存(例如共享的函数库);与其他进程共享的内存。RES:代表该进程实际使用的内存大小。这通常会少于VIRT里显示的大小。SHR:指的是VIRT里有多少的空间是可以分享的(内存或是函数库)。以函数库为例,它并非指该进程使用的整个函数库,换句话说,如果一个进程只使用函数库里几个函数,则该函数将被会被计算至VIRT和SHR中,但是在RES里它只会计算当前已使用函数的大小。S:该进程的状态。%CPU:该进程最近一次刷新以来所占用的CPU时间和总时间的百分比。%MEM:该进程占用的实体内存占总内存的百分比。TIME:该进程自启动以来所占用的总CPU时间。COMMAND:该进程的命令名称,如果一行显示不下,则会进行截取。进入到会话模式后,就需要使用top的交互命令操作其状态。这些命令都是单字母的,键入h将会得到帮助屏幕。其它的常用的交互命令如下:i——忽略闲置的僵死进程。这是一个开关式命令。q——退出top命令的交互模式。r——重新安排一个进程的优先级别。该命令提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入的值越大优先级越低,反之则可以是该进程拥有更高的优先权。默认值是10.S——切换到累计模式。F或者f——从当前显示中添加或者删除项目。O或o——改变显示项目的顺序。l——切换显示平均负载和启动时间信息。m——切换显示内存信息。t——切换显示进程和CPU状态信息。c——切换显示命令名称和完整命令行。M——根据驻留内存大小进行排序。P——根据CPU使用百分比大小进行排序。T——根据时间/累计时间进行排序。2、终止进程(kill)#kill-n进程的PID(n)——代表信号的编号。我们经常用到的编号有:-1——挂起信号(或称是SIGHUP或HUP)-9——强制关闭,杀无赦。-15——终端进程运行。默认kill不加任何参数选项直接跟着进程的PID,就是-15选项。3、控制进程的运行方式对于前台执行的程序,可以用“Ctrl+Z”转入后台,但并不会在后台执行,而是停止状态。○1、用命令jobs显示后台运行的哪些程序。#jobs○2、如果想让#restore-tf/dev/hda1这条命令在后台运行。可以输上#bg程序编号如下:#bg1○3、#fg进程编号此命令可以让程序切换到前台执行。二、任务管理(at、cron)1、(at)安排一次性任务#at[选项]……时间可以指定在一天的某时间执行,如果时间已经过去了,就认为是第二天的这个时间执行。还可以指定在哪一天执行程序,时间格式为:MMDDYY(月日年)、MM/DD/YY、DD.MM.YY常用选项:-f文件——从文件而不是标准输入输出中读取作业信息。例1:在今晚18点25分运行一项任务,在根下建立一个名为123的目录.#at18:25具体如下图:键入mkdir命令语句后,“Ctrl+D”退出.即OK。例2:在2009年12月30日上午10点对系统中的/boot分区,做完全备份,之后重启系统。#at10:0012/29/2009例3:at交互界面中无法修改已输入过的命令语句,用户可以写一个文本文件,再用–f选项调用它。目前根目录下有一个名为123的目录,我们要让系统自动在2009年7月20日晚上8点整,在根目录下创键一个名为234的目录,同时把原来的123目录删掉。我们在根下编辑好1.txt文件,其内容是“mkdir/234”和“rm-rf/123”,两行内容。#at20:0007/20/2009-f/1(文件名最好加上路径)○2、(atq)列出用户未执行的任务,超级用户能列出所有使用者已创建的任务。#atqRoot用户进入/var/spool/at目录中可以查看相关的文件,获得具体操作内容。○3、(atrm)放弃at任务。用#atq查出所有的at任务。然后#atrm[要终止的任务编号]2、(cron)定期完成固定任务。○1、(cron)——是一个可以用来根据时间、日期、月份、星期的组合来调度执行重复任务的守护进程。可以定时地、周期地执行任务。·Cron在执行时需要读取配置文件/etc/crontab来决定什么时候执行什么任务。下图:前四行用来配置cron任务运行环境的变量:SHELL:告诉系统要使用哪个shell环境。PATH:定义用来执行命令的路径。MAILTO:cron任务的输出被邮寄给MAILTO变量定义的用户名,为空电子邮件就邮不出去了。HOME:HOME变量用来设置在执行命令或脚本时使用的主目录。余下的每一行代表一项任务:分小时天月星期用户命令分钟。从0到59之间的任何整数。小时。从0到23之间的任何整数。日期。从1到31之间的任何整数(如果指定了月份,必须是该月份的有效日期)。月份。从1到12之间的任何整数。星期。从0到7之间的任何整数,这里的0和7都代表星期日。用户。命令的执行者,这通常是需要指定的,用来描述使用哪个用户执行后面的命令。命令。命令可以是如:df-h/123/1.txt随便之类的命令脚本。在以上的任何值中:“*”星号。代表所有有效的值。“-”指定的一个整数范围。例如:1——4,代表1、2、3、4。“,”隔开一系列值指定一个列表。例如:3、4、6、8表明这四个指定的整数。“/”指定间隔频率。例如:0~59/2可以用来在分钟字段定义每2分钟;还可以跟“*”一起使、用,如:*/3的值可用在月份字段中表示每3个月运行一次。例1:用root用户身份,编辑/etc/crontab文件每年的1月21日22点24分在根目录下创建一个名为cronshiyan的目录。○2(crontab)命令Root用户控制着/etc/crontab文件,普通用户要配置自己的任务,就要使用$crontab-e命令,注意的是,用户自己配置自己的文件时,就不用输入(用户)那一项了。用crontab-l命令列出自己创建的任务。三、守护进程管理守护进程——一般是服务器类程序中用来无限循环等待事件发生的一个进程。它的作用是等待一个时间发生,事件发生后创建另外的进程完成相应的工作,自己再回去等事件发生。这类进程在后台持续运行直到他们提供的服务被调用。例如:httpd是一个独立的Web服务器服务。在系统启动时运行,但大多数时间是用于监控Web服务的端口。当数据到达80端口后,httpd获得通信信息,并适当的处理它。当这项作业完成后,它就返回监听模式。(守护进程通常在系统启动时自动运行)。1、守护进程的工作方式○1、独立运行的守护进程·独立运行的守护进程由init程序负责管理。·独立运行的守护进程的脚本在/etc/rc.d/init.d/目录下。·运行独立的守护进程的工作方式称做:standalone。·独立运行的守护进程包括:syslog和crond等。○2、xinetd模式·Xinetd更像是一个管理启动服务的管理服务器。·由xinetd维护的服务被放在/etc/xinetd.d目录中。·Xinetd模式也称为超级服务器(Super-Server)。○3、守护进程管理工具Linux提供了不同的守护进程管理工具,其中常用的是(ntsysv和chkconfig)。◇1(nstysv)——工具为启动和停止服务提供了简单的界面。默认设置只有当前运行级别被配置。加上(--level)选项来指定多个运行级别。(#ntsysv--level345)