⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 进程管理及作业控制.htm

📁 有关于linux 学习的书籍
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<!--本网页文件由电子书制作工具“电子文档处理器”未注册版本的Txt2Html功能自动生成 -->
<!-- Made by an Unregistered version of eTextWizard V 1.98-->
<!--“电子文档处理器”软件作者:  冯国华 -->
<!--“电子文档处理器”下载地址:  http://www.etextwizard.com/download/ew/etextwizard.exe -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB2312">
<title>进程管理及作业控制</title>
<meta name="GENERATOR" content="eTextWizard  V 1.98  Build 550">
<style>
<!--
body {  line-height: 20px}
td {  line-height: 20px}
.Paragraph{ font-size: 9pt }
.9{ font-size: 9pt }
A:link   {text-decoration: none; color:#0033CC}
A:visited  {text-decoration: none; color: #0033CC}
A:active {text-decoration: none; color: #0000ff }
A:hover {text-decoration: underline; color: #FF0000 }
-->
</style>
</head>
<body bgcolor="#FFFFFF">
<div align="center"><center>
<table border="0" cellpadding="0" cellspacing="0" width="80%">
  <tr>
     <td width="80%" bgcolor="#000000">
      <table border="0" cellspacing="1" width="100%" cellpadding="6" height="98">
         <tr>
           <td width="100%" bgcolor="#FFFFFD" height="20">
             <table border="0" cellpadding="0" cellspacing="0" width="100%">
               <tr>
                  <td width="100%"><p align="right" class="9"><a href="常用配置.htm">上一页</a>  <a href="index.html">目录</a>  <a href="命令大集合.htm">下一页</a>  </td>
               </tr>
              </table>
            </td>
         </tr>
        <tr bgcolor="#FFCC00"> 
           <td width="100%" height="21"> 
               <p align="center"><strong>进程管理及作业控制</strong>
           </td>
        </tr>
       <tr bgcolor="#FFF5D0"> 
         <td width="100%" height="51" align=center> 
          <table><tr><td><p class="Paragraph"><br>


进程管理及作业控制(一)   
<br>
<br>Linux是一个多任务的操作系统,系统上同时运行着多个进程,正在执行的一个或多个相关进程称为一个作业。使用作业控制,用户可以同时运行多个作业,并在需要时在作业之间进行切换。本章详细介绍进程管理及作业控制的命令,包括启动进程、查看进程、调度作业的命令。 
<br>
<br>进程及作业的概念 
<br>
<br>Linux是一个多用户多任务的操作系统。多用户是指多个用户可以在同一时间使用计算机系统;多任务是指Linux可以同时执行几个任务,它可以在还未执行完一个任务时又执行另一项任务。 
<br>
<br>操作系统管理多个用户的请求和多个任务。大多数系统都只有一个CPU和一个主存,但一个系统可能有多个二级存储磁盘和多个输入/输出设备。操作系统管理这些资源并在多个用户间共享资源,当您提出一个请求时,给您造成一种假象,好象系统只被您独自占用。而实际上操作系统监控着一个等待执行的任务队列,这些任务包括用户作业、操作系统任务、邮件和打印作业等。操作系统根据每个任务的优先级为每个任务分配合适的时间片,每个时间片大约都有零点几秒,虽然看起来很短,但实际上已经足够计算机完成成千上万的指令集。每个任务都会被系统运行一段时间,然后挂起,系统转而处理其他任务;过一段时间以后再回来处理这个任务,直到某个任务完成,从任务队列中去除。 
<br>
<br>Linux系统上所有运行的东西都可以称之为一个进程。每个用户任务、每个系统管理守护进程,都可以称之为进程。Linux用分时管理方法使所有的任务共同分享系统资源。我们讨论进程的时候,不会去关心这些进程究竟是如何分配的,或者是内核如何管理分配时间片的,我们所关心的是如何去控制这些进程,让它们能够很好地为用户服务。 
<br>
<br>进程的一个比较正式的定义是:在自身的虚拟地址空间运行的一个单独的程序。进程与程序是有区别的,进程不是程序,虽然它由程序产生。程序只是一个静态的指令集合,不占系统的运行资源;而进程是一个随时都可能发生变化的、动态的、使用系统运行资源的程序。而且一个程序可以启动多个进程。 
<br>
<br>Linux操作系统包括三种不同类型的进程,每种进程都有自己的特点和属性。 
<br>
<br>  
<br>
<br>* 
<br>
<br>交互进程——由一个shell启动的进程。交互进程既可以在前台运行,也可以在后台运行。 
<br>* 
<br>
<br>批处理进程——这种进程和终端没有联系,是一个进程序列。 
<br>* 
<br>
<br>监控进程(也称守护进程)——Linux系统启动时启动的进程,并在后台运行。 
<br>
<br>上述三种进程各有各的作用,使用场合也有所不同。 
<br>
<br>进程和作业的概念也有区别。一个正在执行的进程称为一个作业,而且作业可以包含一个或多个进程,尤其是当使用了管道和重定向命令。例如“nroff -man ps.1|grep kill|more”这个作业就同时启动了三个进程。 
<br>
<br>作业控制指的是控制正在运行的进程的行为。比如,用户可以挂起一个进程,等一会儿再继续执行该进程。shell将记录所有启动的进程情况,在每个进程过程中,用户可以任意地挂起进程或重新启动进程。作业控制是许多shell(包括bash和tcsh)的一个特性,使用户能在多个独立作业间进行切换。 
<br>
<br>一般而言,进程与作业控制相关联时,才被称为作业。 
<br>
<br>在大多数情况下,用户在同一时间只运行一个作业,即它们最后向shell键入的命令。但是使用作业控制,用户可以同时运行多个作业,并在需要时在这些作业间进行切换。这会有什么用途呢?例如,当用户编辑一个文本文件,并需要中止编辑做其他事情时,利用作业控制,用户可以让编辑器暂时挂起,返回shell提示符开始做其他的事情。其他事情做完以后,用户可以重新启动挂起的编辑器,返回到刚才中止的地方,就象用户从来没有离开编辑器一样。这只是一个例子,作业控制还有许多其他实际的用途。 
<br>
<br>启动进程 
<br>
<br>键入需要运行的程序的程序名,执行一个程序,其实也就是启动了一个进程。在Linux系统中每个进程都具有一个进程号,用于系统识别和调度进程。启动一个进程有两个主要途径:手工启动和调度启动,后者是事先进行设置,根据用户要求自行启动。 
<br>
<br>手工启动 
<br>
<br>由用户输入命令,直接启动一个进程便是手工启动进程。但手工启动进程又可以分为很多种,根据启动的进程类型不同、性质不同,实际结果也不一样,下面分别介绍。 
<br>
<br>1. 前台启动 
<br>
<br>这或许是手工启动一个进程的最常用的方式。一般地,用户键入一个命令“ls –l”,这就已经启动了一个进程,而且是一个前台的进程。这时候系统其实已经处于一个多进程状态。或许有些用户会疑惑:我只启动了一个进程而已。但实际上有许多运行在后台的、系统启动时就已经自动启动的进程正在悄悄运行着。还有的用户在键入“ls –l”命令以后赶紧使用“ps –x”查看,却没有看到ls进程,也觉得很奇怪。其实这是因为ls这个进程结束太快,使用ps查看时该进程已经执行结束了。如果启动一个比较耗时的进程: 
<br>
<br>find / -name fox.jpg 
<br>
<br>然后再把该进程挂起,使用ps查看,就会看到一个find进程在里面。 
<br>
<br>  
<br>
<br>  
<br>
<br>2. 后台启动 
<br>
<br>直接从后台手工启动一个进程用得比较少一些,除非是该进程甚为耗时,且用户也不急着需要结果的时候。假设用户要启动一个需要长时间运行的格式化文本文件的进程。为了不使整个shell在格式化过程中都处于“瘫痪”状态,从后台启动这个进程是明智的选择。 
<br>
<br>[例1] 
<br>
<br>$ troff –me notes &gt; note_form &amp; 
<br>
<br>[1] 4513 
<br>
<br>$ 
<br>
<br>由上例可见,从后台启动进程其实就是在命令结尾加上一个&amp;号。键入命令以后,出现一个数字,这个数字就是该进程的编号,也称为PID,然后就出现了提示符。用户可以继续其他工作。 
<br>
<br>上面介绍了前、后台启动的两种情况。实际上这两种启动方式有个共同的特点,就是新进程都是由当前shell这个进程产生的。也就是说,是shell创建了新进程,于是就称这种关系为进程间的父子关系。这里shell是父进程,而新进程是子进程。一个父进程可以有多个子进程,一般地,子进程结束后才能继续父进程;当然如果是从后台启动,那就不用等待子进程结束了。 
<br>
<br>一种比较特殊的情况是在使用管道符的时候。例如: 
<br>
<br>nroff -man ps.1|grep kill|more 
<br>
<br>这时候实际上是同时启动了三个进程。请注意是同时启动的,所有放在管道两边的进程都将被同时启动,它们都是当前shell的子程序,互相之间可以称为兄弟进程。 
<br>
<br>以上介绍的是手工启动进程的一些内容,作为一名系统管理员,很多时候都需要把事情安排好以后让其自动运行。因为管理员不是机器,也有离开的时候,所以有些必须要做的工作而恰好管理员不能亲自操作,这时候就需要使用调度启动进程了。 
<br>
<br>调度启动 
<br>
<br>有时候需要对系统进行一些比较费时而且占用资源的维护工作,这些工作适合在深夜进行,这时候用户就可以事先进行调度安排,指定任务运行的时间或者场合,到时候系统会自动完成这一切工作。 
<br>
<br>要使用自动启动进程的功能,就需要掌握以下几个启动命令。 
<br>
<br>at命令 
<br>
<br>用户使用at命令在指定时刻执行指定的命令序列。也就是说,该命令至少需要指定一个命令、一个执行时间才可以正常运行。at命令可以只指定时间,也可以时间和日期一起指定。需要注意的是,指定时间有个系统判别问题。比如说:用户现在指定了一个执行时间:凌晨3:20,而发出at命令的时间是头天晚上的 20:00,那么究竟是在哪一天执行该命令呢?如果用户在3:20以前仍然在工作,那么该命令将在这个时候完成;如果用户3:20以前就退出了工作状态,那么该命令将在第二天凌晨才得到执行。下面是at命令的语法格式: 
<br>
<br>at [-V] [-q 队列] [-f 文件名] [-mldbv] 时间 
<br>
<br>at -c 作业 [作业...] 
<br>
<br>at允许使用一套相当复杂的指定时间的方法,实际上是将POSIX.2标准扩展了。它可以接受在当天的hh:mm(小时:分钟)式的时间指定。如果该时间已经过去,那么就放在第二天执行。当然也可以使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的词语来指定时间。用户还可以采用12小时计时制,即在时间后面加上AM(上午)或者PM(下午)来说明是上午还是下午。 
<br>
<br>也可以指定命令执行的具体日期,指定格式为month day(月 日)或者mm/dd/yy(月/日/年)或者dd.mm.yy(日.月.年)。指定的日期必须跟在指定时间的后面。 
<br>
<br>上面介绍的都是绝对计时法,其实还可以使用相对计时法,这对于安排不久就要执行的命令是很有好处的。指定格式为:now + count time-units ,now就是当前时间,time-units是时间单位,这里可以是 minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count是时间的数量,究竟是几天,还是几小时,等等。 
<br>
<br>还有一种计时方法就是直接使用today(今天)、tomorrow(明天)来指定完成命令的时间。下面通过一些例子来说明具体用法。 
<br>
<br>[例2] 指定在今天下午5:30执行某命令。假设现在时间是中午12:30,1999年2月24日,其命令格式如下: 
<br>
<br>at 5:30pm 
<br>
<br>at 17:30 
<br>
<br>at 17:30 today 
<br>
<br>at now + 5 hours 
<br>
<br>at now + 300 minutes 
<br>
<br>at 17:30 24.2.99 
<br>
<br>at 17:30 2/24/99 
<br>
<br>at 17:30 Feb 24 
<br>
<br>  
<br>
<br>以上这些命令表达的意义是完全一样的,所以在安排时间的时候完全可以根据个人喜好和具体情况自由选择。一般采用绝对时间的24小时计时法可以避免由于用户自己的疏忽造成计时错误的情况发生,例如上例可以写成: 
<br>
<br>at 17:30 2/24/99 
<br>
<br>这样非常清楚,而且别人也看得懂。 
<br>
<br>对于at命令来说,需要定时执行的命令是从标准输入或者使用-f选项指定的文件中读取并执行的。如果at命令是从一个使用su命令切换到用户shell中执行的,那么当前用户被认为是执行用户,所有的错误和输出结果都会送给这个用户。但是如果有邮件送出的话,收到邮件的将是原来的用户,也就是登录时 shell的所有者。 
<br>
<br>[例3] 
<br>
<br>$ at -f work 4pm + 3 days 
<br>
<br>在三天后下午4点执行文件work中的作业。 
<br>
<br>$ at -f work 10am Jul 31 
<br>
<br>在7月31日上午10点执行文件work中的作业。 
<br>
<br>在任何情况下,超级用户都可以使用这个命令。对于其他用户来说,是否可以使用就取决于两个文件:/etc/at.allow和/etc/at.deny。如果/etc/at.allow文件存在的话,那么只有在其中列出的用户才可以使用at命令;如果该文件不存在,那么将检查/etc/at.deny文件是否存在,在这个文件中列出的用户均不能使用该命令。如果两个文件都不存在,那么只有超级用户可以使用该命令;空的/etc/at.deny文件意味着所有的用户都可以使用该命令,这也是默认状态。 
<br>
<br>下面对命令中的参数进行说明。 
<br>
<br>-V 将标准版本号打印到标准错误中。 
<br>
<br>-q queue 使用指定的队列。队列名称是由单个字母组成,合法的队列名可以由a-z或者A-Z。a队列是at命令的默认队列。 
<br>
<br>-m 作业结束后发送邮件给执行at命令的用户。 
<br>
<br>-f file 使用该选项将使命令从指定的file读取,而不是从标准输入读取。 
<br>
<br>-l atq命令的一个别名。该命令用于查看安排的作业序列,它将列出用户排在队列中的作业,如果是超级用户,则列出队列中的所有工作。 
<br>
<br>命令的语法格式如下: 
<br>
<br>atq [-V] [-q 队列] [-v] 
<br>
<br>-d atrm 命令的一个别名。该命令用于删除指定要执行的命令序列,语法格式如下: 
<br>
<br>atrm [-V] 作业 [作业...] 
<br>
<br>-c 将命令行上所列的作业送到标准输出。 
<br>
<br>[例4] 找出系统中所有以txt为后缀名的文件,并且进行打印。打印结束后给用户foxy发出邮件通知取件。指定时间为十二月二十五日凌晨两点。 
<br>
<br>首先键入: 
<br>
<br>$ at 2:00 12/25/99 
<br>
<br>然后系统出现at&gt;提示符,等待用户输入进一步的信息,也就是需要执行的命令序列: 
<br>
<br>at&gt; find / -name “*.txt”|lpr 
<br>
<br>at&gt; echo “foxy:All texts have been printed.You can take them over.Good day!River” |mail -s ”job done” foxy 
<br>
<br>输入完每一行指令然后回车,所有指令序列输入完毕后,使用&lt;Ctrl+d&gt;组合键结束at命令的输入。这时候屏幕将出现如下信息: 
<br>
<br>warning:command will be executed using /bin/sh. 
<br>
<br>job 1 at 1999-12-25 02:00 
<br>
<br>提醒用户将使用哪个shell来执行该命令序列。 
<br>
<br>实际上如果命令序列较长或者经常被执行的时候,一般都采用将该序列写到一个文件中,然后将文件作为at命令的输入来处理。这样不容易出错。 
<br>
<br>  
<br>
<br>[例5] 上面的例子可以修改如下: 
<br>
<br>将命令序列写入到文件/tmp/printjob,语句为: 
<br>
<br>$ at -f /tmp/printjob 2:00 12/25/99 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -