第6章Linux运行级别与进程管理本章介绍了Linux的运行级别及其控制文件,Linux的进程管理和任务调度方法,以及Linux系统日志管理问题。学完本章后,你将能够:控制和管理Linux的运行级别描述Linux进程的基本概念在图形界面和命令行界面下管理进程在命令行界面下进行任务调度管理系统日志6.1Linux的运行级别6.2进程和作业6.3Linux的进程管理6.4任务调度6.5系统日志管理6.1.1Linux的启动过程Linux的启动过程由以下几个阶段组成:执行GRUB或LILO引导装载程序加载Linux内核执行/sbin/init读取并执行/etc/inittab执行/etc/rc.d/rc.local脚本程序执行/bin/login登录程序6.1.2Linux的运行级别1./etc/inittab文件Linux系统的运行级别可以理解为当用户登录时,系统为用户提供何种服务,它取决于/etc/inittab配置文件的内容。inittab文件是init进程的配置文件,用于指定系统启动时和正常运行时将要运行哪些脚本和服务。/etc/inittab文件中每一配置命令行由id、runlevels、action、command四个字段依次构成,各字段间用冒号分隔,共同确定某个进程在哪些运行级别以何种方式运行。2.设置Linux的运行级别大多数类UNIX系统都根据SystemV对init的定义,将运行级别分为7种模式。运行级别的七种模式运行级别说明0关机(halt)1进入单用户模式2多用户模式,无网络支持3完全的多用户模式,有网络支持,文本界面4未使用,为保留的运行级别5完全的多用户模式,有网络支持和X11图形接口6重启系统一般系统默认的运行级别为3或5。系统管理员可以通过修改/etc/inittab文件内容来重新指定系统的默认运行级别,但应避免设为0或6,因为这两个执行模式会在开机后直接关机或重启。若要修改运行级别,只需要在此文件中找出一行:id:3:initdefault:其中的数字3表示目前系统默认的运行级别为3,将此数字修改为0-6之间的其他数字应改变了系统的运行级别,如改为5,系统将以图形界面登录,并提供多用户和网络支持。在系统运行过程中,可以使用下列格式的命令使系统进入指定的运行级别:[root@rhel4~]#/sbin/initrunlevelrunlevel为指定的运行级别,取值为0~6。例如,以下命令将使系统进入运行级别5。[root@rhel4~]#/sbin/init5而下列命令将使系统重新启动:[root@rhel4~]#/sbin/init6设置或修改了系统的运行级别后,可以通过以下命令来查看设置的结果:[root@rhel4~]#/sbin/runlevel53其中,“5”表示修改前的运行级别,“3”表示当前的运行级别。6.1Linux的运行级别6.2进程和作业6.3Linux的进程管理6.4任务调度6.5系统日志管理6.2.1进程Linux是一个多用户、多任务的操作系统,在同一时间允许有许多用户向操作系统发出各种操作命令。每当运行一个命令时,系统就会同时启动一个进程。进程(Processes)是指具有独立功能的程序的一次运行过程,也是系统资源分配和调度的基本单位。Linux系统在刚刚启动时,运行于内核方式,此时只有一个初始化进程在运行,该进程首先对系统进行初始化,然后执行初始化程序(即/sbin/init)初始化进程是系统的第一个进程,以后的所有进程都是初始化进程的子进程。2.进程的状态为了充分利用系统资源,Linux系统将进程分为以下几种状态:运行状态:进程正在使用CPU运行的状态。处于运行态的进程又称为当前进程(currentprocess)。就绪状态:进程已获得除CPU外运行所需的全部资源,一旦系统把CPU分配给它之后即可投入运行。等待状态:又称睡眠状态,进程正在等待某个事件或某个资源。暂停状态:又称挂起状态,进程需要接受某种特殊处理而暂时停止运行。休眠状态:进程主动暂时停止运行。僵死状态:进程的运行已经结束,但它的控制信息仍在系统中。终止状态:进程已经结束,系统正在回收资源。3.进程的类型Linux系统的进程大体可分为交互进程、批处理进程和守护进程三种。交互进程:由shell通过执行程序所产生的进程,可以工作在前后台。批处理进程:不需要与终端相关,是一个进程序列。守护进程:linux系统自动启动,工作在后台,用于监视特定服务。4.进程的优先级在Linux操作系统中,进程之间是竟争资源(比如CPU和内存的占用)的关系。linux内核采用优先数调度算法来为进程分配CPU。每个进程都有两个优先级值:静态值和动态。我们通常讨论的优先级是指静态优先级,这是因为我们无法控制动态优先级。Linux中进程优先级(niceness)的取值范围是-20~19之间的整数,取值越高,优先级越低,默认优先级为0。启动进程的普通用户只能降低进程优先级,超级用户不但可以降低优先级,也可以提高优先级。6.2.2作业正在执行的一个或多个相关进程被称为作业。一个作业可以包含一个或多个进程,比如当使用了管道和重定向命令时,该作业就包含了多个进程。如:[root@rhel4~]#catfile|wc–l在这个命令中,作业“catfile|wc–l”就同时启动了两个进程,它们分别是cat和wc。作业可以分为两类:前台作业和后台作业。前台作业运行于前台,与用户进行交互操作;后台作业运行于后台,不直接与用户交互,但可以输出执行结果。在同一时刻,每个用户只能有一个前台作业。6.2.3进程的启动进程的启动方式分为手工启动和调度启动两种。1.手工启动手工启动即由用户在Shell命令行下输入要执行的程序来启动一个进程。手工启动又可以分为前台启动和后台启动。用户输入Shell命令后直接按Enter,则启动前台进程;如果在输入Shell命令后加上“&”符号再按回车则启动后台进程。2.调度启动调度启动是指系统按照用户的事先设置,在特定的时间或者周期性地执行指定的进程。Linux中可以实现at调度、batch调度和cron调度。6.1Linux的运行级别6.2进程和作业6.3Linux的进程管理6.4任务调度6.5系统日志管理6.3.1命令行方式下的进程管理1.查看系统的进程Linux系统中每个运行着的程序都是系统中的一个进程要查看系统当前的进程及其执行的状态,可以使用ps和top命令来实现。(1)ps命令格式:ps[选项]功能:显示系统中当前的进程及其状态。常用选项:-a显示终端上所有用户的进程。-l显示进程的详细信息,包括父进程号、登录的终端号、进程优先级等。-u以用户的格式显示进程的详细信息,包括CPU、内存的使用率等。-x显示没有控制台的进程及后台进程。【例6-1】查看当前用户在当前控制台上启动的进程。[root@rhel4~]#psPIDTTYTIMECMD2135tty100:00:00bash3178tty100:00:00ps显示信息分为4个字段,其中:PID:表示进程号,系统根据这个编号处理相应的进程TTY:表示登录的终端号,桌面环境或远程登录的终端号表示为pts/n(n为终端编号,从0开始依次编号),字符界面的终端号表示为tty1~tty6,没有控制台的进程显示为“?”TIME:表示该进程消耗的CPU时间CMD:表示正在执行的命令或者进程【例6-2】查看当前控制台上进程的详细信息。[root@rhel4~]#ps–l该命令使用“-l”参数,它除了显示ps命令的4个基本字段外,另外还有10个附加信息可供查看。其主要输出项说明如下:F:该进程状态的标记S:进程状态代码。主要状态有以下几种:D:不可中断的休眠状态,常用于设备I/OR:运行状态S:休眠状态T:终止状态Z:僵死状态W:进入内存交换(从内核2.6开始无效)<:高优先级的进程N:低优先级的进程UID:进程执行者的ID号PPID:父进程的标识符PRI:进程执行的动态优先级NI:进程执行的静态优先级SZ:进程占用内存空间的大小,以KB为单位【例6-3】查看系统中每位用户的全部进程。[root@rhel4~]#ps–aux该命令显示系统中所有用户执行的进程,包括没有控制台的进程及后台进程。主要输出项说明:%CPU:CPU使用率百分比%MEM:内存使用率百分比VSZ:占用的虚拟内存大小RSS:占用的物理内存大小STAT:进程的状态START:进程的开始时间系统管理员常常配合grep命令的使用,以缩小查看的范围:[root@rhel4~]#ps–aux|greptom(2)top命令top命令与ps命令很相似,都是用来显示目前系统正在执行的进程。但与ps命令最大的不同是,top命令在执行后会以指定的时间间隔来更新显示的信息,因此top命令可以动态地监控系统性能。在Shell命令行上直接输入“top”命令,屏幕上会动态显示系统中的进程信息,包括:已开机的时间、目前登录的用户数、系统目前存在的进程个数,以及每个进程的详细信息等。2.查看系统的作业可以使用jobs命令为查看系统当前的所有作业。格式:jobs[选项]常用选项:-p仅显示进程号-l同时显示进程号和作业号【例6-3】显示所有的作业,同时显示其进程号。[root@rhel4~]#jobs–l[1]-1468stopcatA1[2]+1788stopviA1命令执行的结果分别显示作业号、进程号、工作状态、作业产生的命令。3.作业的前后台切换利用bg命令和fg命令可实现前台作业和后台作业之间的相互转换。(1)bg命令格式:bg[作业号]功能:使用bg命令可以将挂起的前台作业切换到后台运行。若未指定作业号,则将挂起的作业队列中的第一个作业切换到后台。例6-4】使用vi编辑file文件,然后使用【Ctrl+Z】组合键挂起vi进程,再切换到后台。[root@rhel4~]#vifile<Ctrl+Z>[1]+Stopped[root@rhel4~]#bg1[1]+vifile&注意:将正在运行的前台作业切换到后台,功能上与在Shell命令结尾加上“&”符号相似。(2)fg命令格式:fg[作业号]功能:使用fg命令可以把后台作业调入前台运行。【例6-5】将例6-4中作业号为1的作业切换到前台继续执行。[root@rhel4~]#fg14.设置进程的优先级(1)nice命令格式:nice[-优先级数值]命令功能:用指定的优先级来启动指定进程。一般进程执行时的优先等级范围为-20~19,其中-20表示最高等级,而19的等级最低。优先级-1~-20的等级只有管理员可以设置,若是进程执行时没有使用nice命令,则默认的优先级等级为0;如果使用nice命令,而没有指定优先级值,则默认的优先等级为10。【例6-6】以下通过6个不同优先等级的命令来说明nice命令的使用方法。[root@rhel4~]#vi&//以优先等级0在后台执行vi程序[root@rhel4~]#nicevi&//以优先等级10在后台执行vi程序[root@rhel4~]#nice-50vi&//以优先等级19在后台执行vi程序[root@rhel4~]#nice-18vi&//以优先等级18在后台执行vi程序[root@rhel4~]#nice--18vi&//以优先等级-18在后台执行vi程序[root@rhel4~]#nice--50vi&//以优先等级-20在后台执行vi程序可以使用ps命令来验证上述命令使用的正确性。[root@rhel4~]#ps-l(2)renice命令格式:renice优先级数值参数功能:修改正在运行的进程的优先等级,设定指定用户或组的进程优先级。常用参数:-p进程号修改指定进程的优先级,“-p”可以缺省-u用户名修改指定用户所启动进程的默认优先级-g组ID号修改指定组中所有用户所启动进程的默认优先级【例6-7】将PID为2564的进程变更等级为“-15”。[root@rhel4~]#renice