《第8章 Linux下进程管理》由会员分享,可在线阅读,更多相关《第8章 Linux下进程管理(114页珍藏版)》请在金锄头文库上搜索。
1、Linux操作系统,第8章 Linux下进程管理 8.1 进程概述 8.2 进程管理 8.3 进程的实现 8.4 进程间通信,第8章 Linux下进程管理,本章概述Linux是一个多用户、多任务的操作系统。在这样的环境中,各种计算机资源(如文件、内存、CPU等)的分配和管理都以进程为单位。为了协调多个进程对这些共享资源的访问,操作系统要跟踪所有进程的活动,以及它们对系统资源的使用情况,从而实施对进程和资源的动态管理。本章将对Linux的进程管理做详细的介绍。,8.1 Linux进程概述,程序:是存储在磁盘上包含可执行机器指令和数据的静态实体。进程定义:一个其中运行着一个或多个线程的地址空间和这
2、些线程所需要的系统资源的集合成为进程,简言之,是OS内一个程序的一个运行实例。 Linux系统中每个运行的程序至少由一个进程组成。 程序与进程:进程与程序是有区别的,进程不是程序,虽然它由程序产生。程序只是一个静态的指令集合,不占系统的运行资源;而进程是一个随时都可能发生变化的、动态的、使用系统运行资源的程序。而且一个程序可以启动多个进程。,8.1 Linux进程概述,Linux是一个多用户多任务操作系统,主要活动的实体是进程。进程是对正在运行程序的抽象,通过支持并发,可以将一个CPU变换为多个虚拟CPU。进程是Linux中最重要的概念,其他部分都是围绕着进程来组织的。进程都具有一定的功能和权
3、限,运行在各自独立的虚拟地址空间,彼此独立,且通过通信机制实现同步互斥,通过调度程序实现合理调度。,8.1 Linux进程概述,Linux操作系统包括以下三种不同类型的进程。每种进程都有其自身的特点和属性: 1、交互进程:由一个shell启动的进程。交互进程即可在前台运行,也可以在后台运行 2、批处理进程:这种进程和终端没有联系,是一个进程序列 3、守护进程:Linux系统启动时启动的进程,并在后台运行,它本身不在屏幕上显示任何信息,8.1 Linux进程概述 8.1.1进程状态,8.1.1 Linux进程状态1、通常在操作系统中,进程至少有三种基本的状态,分为为运行态、就绪态和封锁态(或阻塞
4、态)运行态:当前进程已分配到CPU,正在处理器上执行的状态。处于这种状态的进程个数不能大于CPU的数目。在一般单CPU机制中,任何时刻处于运行状态的进程至多有一个。就绪态:指进程已具备运行条件,但因为其他进程正占用CPU,所以暂时不能运行而等待分配CPU的状态。一旦把CPU分配给它,就可以立即运行。在操作系统中,处于就绪态的进程数目可以是多个。,8.1 Linux进程概述 8.1.1进程状态,封锁态:进程因等待某种事情发生(例如某一输入、输出操作完成,等待其他进程发来的信号等)而暂时不能运行的状态。也就是说处于封锁态的进程不具备运行条件,即使CPU空闲,它也无法使用。这种状态有时候也称为不可运
5、行状态或挂起状态。系统中处于这种状态的进程也可以有多个。,8.1 Linux进程概述 8.1.1进程状态,2、进程状态及其变化,8.1 Linux进程概述 8.1.2Linux进程工作模式,8.1.2 Linux进程工作模式1、Linux系统中,进程的执行模式划分为用户模式和内核模式。用户模式:当前运行的是用户程序、应用程序或者内核之外的系统程序,那么对应进程就在用户模式下运行。内核模式:如果在用户程序运行过程中出现系统调用或者发生中断事件,就要运行操作系统(即核心)程序,进程的运行模式就变为内核模式。在内核模式下运行的进程可以执行机器的特权指令;而且,此时该进程的运行不受用户的干预,即使是r
6、oot用户也不能干预内核模式下进程的运行。,8.1 Linux进程概述 8.1.2Linux进程工作模式,2、按照进程的功能和运行的程序分类,进程可以划分为两大类:系统进程和用户进程 系统进程:只运行在内核模式,执行操作系统代码,完成一些管理性的工作,例如内存分配和进程切换 用户进程:通常在用户模式中运行,并通过系统调用或在出现中断、异常时进入内核模式。,8.2 进程管理 8.2.1启动Linux进程,在系统中,键入需要运行的程序的名称,执行一个程序,其实就启动了一个进程。在Linux系统中每个进程都有一个进程号(PID),用于系统识别和调度进程。启动一个进程有两个主要途径:手工启动和调度启动
7、。与前者不同的是:后者是事先进行设置,根据用户要求自行启动。1、手工启动由用户输入命令,直接启动一个进程便是手工启动进程。其中手工启动又可以分为前台启动和后台启动两种 前台启动: ls 后台启动:ls &,8.2 进程管理 8.2.1启动Linux进程,2、在指定时刻执行命令序列at命令用at命令在指定时刻运行指定的命令序列。超级用户可以随意使用at命令,对于普通用户,则由/etc/at.allow或/etc/at.deny文件决定是否可以使用。假如/etc/at.allow文档存在的话,那么只有在其中列出的用户才能够使用linux at命令;假如该文档不存在,那么将检查/etc/at.den
8、y文档是否存在,在这个文档中列出的用户均不能使用该命令。假如两个文档都不存在,那么只有终极用户能够使用该命令;空的/etc/at.deny文档意味着所有的用户都能够使用该命令,这也是默认状态。,8.2 进程管理 8.2.1启动Linux进程,at命令用于在指定的时刻执行定时任务。在Linux系统中at命令以守护进程atd的方式存在,常驻系统。at命令可以向atd任务队列中添加任务,也可以查看、删除atd队列中的任务。at命令格式如下:at time 选项,8.2 进程管理 8.2.1启动Linux进程,at命令的语法格式:at -V-q 队列-f 文档名-mldv 时间at -c 作业 作业.
9、-V 打印at版本号。-q queue将任务添加到特定的队列query中。队列名称是由单个字母组成,合法的队列名能够由a-z或A-Z。a队列是linux at命令的默认队列。-m 作业结束后发送邮件给执行linux at命令的用户。-f file将w_file文件内容作为任务,而不是从标准输入读取。-c 将命令行上所列的作业送到标准输出。-v 列出所有已经完成但尚未删除的指定,8.2 进程管理 8.2.1启动Linux进程,-l atq命令的一个别名。该命令用于查看安排的作业序列,将列出用户排在队列中的作业,假如是终极用户,则列出队列中的任何工作。命令的语法格式如下:atq -V -q 队列
10、-v-d atrm 命令的一个别名。该命令用于删除指定要执行的命令序列,语法格式如下:atrm -V 作业 作业. (作业号可以通过atq查询),8.2 进程管理 8.2.1启动Linux进程,1)、时间格式:HH:MM(24小时制)#at 23:00然后系统出现at提示符,等待用户输入进一步的信息,也就是需要执行的命令序列:找出系统中任何以txt为后缀名的文档atfind / -name *.txt|lpr输入完每一行指令然后回车,任何指令序列输入完毕后,使用组合键Ctrl+D结束linux at命令的输入。这时候屏幕将出现如下信息:warning:command will be execu
11、ted using /bin/sh.job 1 at 1999-12-25 02:00提醒用户将使用哪个shell来执行该命令序列。,8.2 进程管理 8.2.1启动Linux进程,2)、时间格式:在时间后添加am或pm#at 11:00pm3)、时间格式:now+数目 时间单位at now +6 hours4)、时间格式:加today、tomorrow后缀。at 23:00 tomorrow5)、使用确切的某月某日执行某作业at 10:00am july 31,8.2 进程管理 8.2.1启动Linux进程,例如,由于系统管理需要,希望在上午8:50执行一个定时任务。可以在终端提示符下输入如
12、下的命令,然后按照如下图所示的操作。rootmyhost root# at 8:50am,at操作,8.2 进程管理 8.2.1启动Linux进程,在at 8:50am命令输入后,系统给出“at”提示符,在其后输入任务的内容。输入完毕后,使用Ctrl+D结束at提示符。此时该任务被加入atd的任务等待队列,可以使用at l或atq命令查看,如下图所示。,查看atd队列,第一列是任务号,第二列是任务执行的时间,a表示任务所在的队列号,root表示执行任务的用户。,8.2 进程管理 8.2.1启动Linux进程,从文件中获取atd任务的方法有两种:一种是使用输入重定向,另一种是使用at工具提供的-
13、f参数。对于上例中的任务内容,可以将at提示符后面除EOF所在的行写入/root/work文件中,然后在终端提示符下执行如下命令:rootmyhost root# at 8:50 find / -name *.txt at job 10 at 2007-10-16 21:39,8.2 进程管理 8.2.1启动Linux进程,4、在系统启动时,自动转入后台运行。每条命令可以根据需要执行若干次cron命令cron工具是一个可以根据指定的时间、日期、月份和星期的组合来自动重复执行任务的工具。在Linux系统中cron工具以守护进程crond的方式存在,常驻系统。在使用cron的定时任务(调度)功能之
14、前,必须确定系统是否已经安装软件包vixie-cron.rpm。可以在终端提示符下使用rpm -qa vixie-cron命令查看系统是否已经安装该软件包。如果系统给出如下图的信息表示已经成功安装。,确认是否安装vixie-cron软件包,8.2 进程管理 8.2.1启动Linux进程,Linux系统在默认的情况下,crond守护进程是启动的,如果需要查看当前时刻crond守护进程是否处于运行状态,可以在终端提示符下使用如下的命令,命令返回的crond进程状态,如下图所示。rootmyhost root# service crond status,查看crond进程状态,8.2 进程管理 8.2.1启动Linux进程,1) crond主配置文件crond守护进程有一个主配置文件/etc/crontab,其基本内容如下图所示。,/etc/crontab文件内容,8.2 进程管理 8.2.1启动Linux进程,