第13章 Linux中的进程管理

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第13章Linux中的进程管理Linux是一个多用户、多任务的操作系统。在这样的系统中,各种计算机资源(如文件、内存、CPU等)的分配和管理都以进程为单位。为了协调多个进程对这些共享资源的访问,操作系统要跟踪所有进程的活动,以及它们对系统资源的使用情况,从而实施对进程和资源的动态管理。本章将对Linux的进程管理做详细的介绍。13.1Linux进程概述程序是存储在磁盘上包含可执行机器指令和数据的静态实体,而进程是在操作系统中执行的特定任务的动态实体。Linux系统中每个运行中的程序至少由一个进程组成。每个进程与其他进程都是彼此独立的,都有自己独立的权限与职责。一个用户的应用程序不会干扰到其他用户的程序或者操作系统本身。Linux操作系统包括如下三种不同类型的进程,每种进程都有其自己的特点和属性:交互进程:由一个shell启动的进程。交互进程既可以在前台运行,也可以在后台运行。批处理进程:这种进程和终端没有联系,是一个进程序列。守护进程:Linux系统启动时启动的进程,并在后台运行。上述三种进程各有各的作用,使用场合也有所不同。13.2Linux进程原理为了更好地对Linux系统的进程进行高效、有针对性地管理,需要对进程的基本原理有所了解,本节将介绍Linux系统中进程的状态以及基本的工作模式。13.2.1Linux进程的状态通常在操作系统中,进程至少要有三种基本状态,分别为:运行态、就绪态和封锁态(或阻塞态)。在Linux系统中,进程主要有以下几个状态:运行态(TASK_RUNNING):此时,进程正在运行(即系统的当前进程)或者准备运行(即就绪态)等待态:此时进程在等待一个事件的发生或某种系统资源。Linux系统分为两种等待进程:可中断的(TASK_INTERRUPTIBLE)和不可中断的(TASK_UNINTERRUPTIBLE)。可中断的等待进程可以被某一信号(Signal)中断;而不可中断的等待进程不受信号的打扰,将一直等待硬件状态的改变。停止态(TASK_STOPPED):进程被停止,通常是通过接收一个信号。正在被调试的进程可能处于停止状态。僵死态(TASK_ZOMBIE):由于某些原因被终止的进程,但是该进程的控制结构task_struct仍然保留着。13.2.2Linux进程工作模式在Linux系统中,进程的执行模式划分为用户模式和内核模式。如果当前运行的是用户程序、应用程序或者内核之外的系统程序,那么对应进程就在用户模式下运行;如果在用户程序执行过程中出现系统调用或者发生中断事件,就要运行操作系统(即核心)程序,进程模式就变成内核模式。在内核模式下运行的进程可以执行机器的特权指令;而且,此时该进程的运行不受用户的干预,即使是root用户也不能干预内核模式下进程的运行。按照进程的功能和运行的程序分类,进程可划分为两大类:一类是系统进程,只运行在内核模式,执行操作系统代码,完成一些管理性的工作,例如内存分配和进程切换;另外一类是用户进程,通常在用户模式中执行,并通过系统调用或在出现中断、异常时进入内核模式。用户进程既可以在用户模式下运行,也可以在内核模式下运行。13.3Linux守护进程介绍如上所述,守护进程是Linux系统三大进程之一,而且是系统中比较重要的一种,该进程可以完成很多工作,包括系统管理以及网络服务等,下面就对这些守护进程进行介绍。13.3.1守护进程简介守护进程(Daemon,也称为精灵进程)是指在后台运行而又没有终端或登录shell与之结合在一起的进程。守护进程经常在程序启动时开始运行,在系统结束时停止。这些进程没有控制终端,所以称为在后台运行。Linux系统有许多标准的守护进程,其中一些周期性地运行来完成特定的任务(例如crond),而其余的则连续地运行,等待处理系统中发生的某些特定的事件(例如xinetd和lpd)。启动守护进程有如下几种方法:在引导系统时启动:此种情况下的守护进程通常在系统启动script的执行期间被启动,这些script一般存放在/etc/rc.d中。人工手动从shell提示符启动:任何具有相应的执行权限的用户都可以使用这种方法启动守护进程。使用crond守护进程启动:这个守护进程查询存放在/var/spool/cron/crontabs目录中的一组文件,这些文件规定了需要周期性执行的任务。执行at命令启动:在规定的日期和执行一个程序。13.3.2重要守护进程介绍守护进程功能说明amd自动安装NFS(网络文件系统)apmd高级电源管理httpdWeb服务器xinetd支持多种网络服务的核心守候程序arpwatch记录日志并构建一个在LAN接口上看到的以太网地址和IP地址对数据库autofs自动安装管理进程automount,与NFS相关,依赖于NISbootparamd引导参数服务器,为LAN上的无盘工作站提供引导所需的相关信息crondLinux下的计划任务dhcpd启动一个DHCP(动态IP地址分配)服务器gated网关路由守候进程,使用动态的OSPF路由选择协议inndUsenet新闻服务器linuxconf允许使用本地WEB服务器作为用户接口来配置机器lpd打印服务器namedDNS服务器netfs安装NFS、Samba和NetWare网络文件系统network激活已配置网络接口的脚本程序nfsdNFS服务器portmapRPCportmap管理器,管理基于RPC服务的连接postgresql一种SQL数据库服务器routed路由守候进程,使用动态RIP路由选择协议sendmail邮件服务器sendmailsmbSamba文件共享/打印服务snmpd本地简单网络管理守候进程squid激活代理服务器squidsyslog一个让系统引导时起动syslog和klogd系统日志守候进程的脚本xfsXWindow字型服务器,为本地和远程X服务器提供字型集xntpd网络时间服务器identd认证服务,在提供用户信息方面与finger类似13.4启动Linux进程在系统中,键入需要运行的程序的程序名,执行一个程序,其实也就是启动了一个进程。在Linux系统中每个进程都具有一个进程号,用于系统识别和调度进程。启动一个进程有两个主要途径:手工启动和调度启动。与前者不同的是:后者是事先进行设置,根据用户要求自行启动。13.4.1手工启动1.前台启动这是手工启动一个进程的最常用的方式。一般地,用户键入一个命令“ls–l”,这就已经启动了一个进程,而且是一个前台的进程。这时候系统其实已经处于一个多进程状态。在通常情况下,用户在启动进程时,系统中已经存在了许多运行在后台的、系统启动时就已经自动启动的进程。2.后台启动直接从后台手工启动一个进程用得比较少一些,除非是该进程甚为耗时,且用户也不急着要看到处理结果的时候。假设用户要启动一个要长时间运行的格式化文本文件的进程,为了不使整个shell在格式化过程中都处于“瘫痪”状态(长时间看不到任何运行结果),因此这个时候选择从后台启动进程是明智的选择,下面是一个后台启动进程的例子:#./calculate&//启动一个后台计算进程[1]2116//分配给的该后台进程的ID号13.4.2在指定时刻执行命令序列——at命令有时候须要对系统进行一些比较费时而且占用资源的维护工作,这些工作适合在深夜进行,这时候用户就可以事先进行调度安排,指定任务运行的时间或者场合,到时候系统会自动完成这一切工作。用户使用at命令在指定时刻执行指定的命令序列at命令可以只指定时间,也可以时间和日期一起指定。需要注意的是,指定时间有个系统判别问题。比如说:用户现在指定了一个执行时间:凌晨3:20,而发出at命令的时间是头天晚上的20:00,那么这将会产生两种执行情况:如果用户在3:20以前仍然在工作,那么该命令将在这个时候完成;如果用户3:20以前就退出了工作状态,那么该命令将在第二天凌晨才得到执行。13.4.3在资源比较空闲的时候执行命令——batch命令batch命令用低优先级运行作业,该命令几乎和at命令的功能完全相同,惟一的区别在于:at命令是在指定时间,很精确的时刻执行指定命令;而batch却是在系统负载较低,资源比较空闲的时候执行命令,这个主要是由系统来决定执行的,因而用户的干预权力很小。该命令适合于执行占用资源较多的命令。batch命令的语法格式也和at命令十分相似,如下所示:batch[-V][-qqueue][-ffile][-mv][时间]具体的参数解释与at命令相似,这里不再赘述,请参看at命令。一般地说,不用为batch命令指定时间参数,因为batch本身的特点就是由系统决定执行任务的时间,如果用户再指定一个时间,就失去了该命令本来的意义。下面给出使用该命令的例子://使用batch命令执行在根目录下查询文本文件的功能#batchatfind/-name*.txtatEOTjob14at2005-06-1122:59注意:batch和at命令都将自动转入后台,所以启动的时候并不需要手工添加&符号。13.4.4不断重复执行某些命令——cron命令前面介绍的两条命令都会在一定时间内完成一定任务,但是注意它们都只能执行一次。,当系统在指定时间完成任务后,一切就结束了。但是在很多时候需要不断重复一些命令,比如:某公司每周一自动向员工报告头一周公司的活动情况,这时候就需要使用cron命令来完成任务了。实际上,cron命令是不应该手工启动的。cron命令在系统启动时就由一个shell脚本自动启动,进入后台(所以不需要使用“&”符号)。一般的用户没有运行该命令的权限,虽然超级用户可以手工启动cron,不过还是建议将其放到shell脚本中由系统自行启动。首先cron命令会搜索/var/spool/cron目录,寻找以/etc/passwd文件中的用户名命名的crontab文件,被找到的这种文件将载入内存。cron启动以后,将首先检查是否有用户设置了crontab文件,如果没有就转入“休眠”状态,释放系统资源。所以该后台进程占用资源极少。它每分钟“醒”过来一次,查看当前是否有需要运行的命令。命令执行结束后,任何输出都将作为邮件发送给crontab的所有者,或者是/etc/crontab文件中MAILTO环境变量中指定的用户。13.4.5操作cron后台进程的表格——crontab命令crontab命令用于安装、删除或者列出用于驱动cron后台进程的表格。用户把要执行的命令序列放到crontab文件中以获得执行。每个用户都可以有自己的crontab文件。在/var/spool/cron下的crontab文件不可以直接创建或者直接修改。crontab文件是通过crontab命令得到的。该文件中每行都包括六个域,其中前五个域是指定命令被执行的时间,最后一个域是要被执行的命令。每个域之间使用空格或者制表符分隔。格式如下(此处用空格符分隔):minutehourday-of-monthmonth-of-yearday-of-weekcommands第一项是分钟,第二项是小时,第三项是一个月的第几天,第四项是一年的第几个月,第五项是一周的星期几,第六项是要执行的命令。这些项都不能为空,必须填入。如果用户不需要指定其中的几项,那么可以使用“*”代替。因为“*”是统配符,可以代替任何字符,所以就可以认为是任何时间,也就是该项被忽略了。在表13.2中给出了每项的合法范围。13.5进程的挂起及恢复作业控制允许将进程挂起并可以在需要时恢复进程的运行,被挂起的作业恢复后将从中止处开始继续运行。只要在键盘上使用组合键[Ctrl+Z],即可挂起当前的前台作业。#cattext.file[1]+stoppedcattext.file#jobs[1]+stoppedcattext.file在键盘上按组合键[Ctrl+Z]后,将挂起当前执行的命令cat。使用jobs命令可以显示shell的作业清单,包括具体的作业、作业号以及作业当前所处的状态。恢复进程执行时,有两种选择:用

1 / 22
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功