网站建设| 数据库类| 图形图象| 程序设计| 现代办公| 操作系统| 考试认证| 网络技术| 软件工程| 电脑相关| 文学作品
网站开发| 网页制作| 操作系统| 图象图形| 考试认证| 数据库类| 程序设计| 硬件技术| 现代办公| 网络技术| 笑话频道
 
您的位置: 电脑书库首页-> 电脑文摘-> 操作系统-> Linux系列-> linux下的进程管理及作业控制

linux下的进程管理及作业控制
作者:佚名 来源:InterNet 加入时间:2003-7-20
相关文章 相关书籍:
  • 山东银监局银行业金融机构高级管理人员测试系统题库
  • 基于ASP.NET的开放实验室管理系统
  • 图书管理信息系统的设计和实现
  • 简单网络管理协议SNMP
  • 电脑管理与维护清理图解
  • Visual C++ 入门到精通-数据库管理
  • SQL Server 2000 超级管理手冊
  • Oracle 数据库DBA管理手册
  • Oracle 管理员手册
  • Oracle 9i 数据库管理员指南
  • Linux是一个多任务的作系统,系统上同时运行着多个进程,正在执行的一个或多个相关进程称为一个作业。使用作业控制,用户可以同时运行多个作业,并在需要时在作业之间进行切换。本章详细介绍进程管理及作业控制的命令,包括启动进程、查看进程、调度作业的命令。

    进程及作业的概念

    Linux是一个多用户多任务的作系统。多用户是指多个用户可以在同一时间使用计算机系统;多任务是指Linux可以同时执行几个任务,它可以在还未执行完一个任务时又执行另一项任务。

    作系统管理多个用户的请求和多个任务。大多数系统都只有一个CPU和一个主存,但一个系统可能有多个二级存储磁盘和多个输入/输出设备。作系统管理这些资源并在多个用户间共享资源,当您提出一个请求时,给您造成一种假象,好象系统只被您独自占用。而实际上作系统监控着一个等待执行的任务队列,这些任务包括用户作业、作系统任务、邮件和打印作业等。作系统根据每个任务的优先级为每个任务分配合适的时间片,每个时间片大约都有零点几秒,虽然看起来很短,但实际上已经足够计算机完成成千上万的指令集。每个任务都会被系统运行一段时间,然后挂起,系统转而处理其他任务;过一段时间以后再回来处理这个任务,直到某个任务完成,从任务队列中去除。

    Linux系统上所有运行的东西都可以称之为一个进程。每个用户任务、每个系统管理守护进程,都可以称之为进程。Linux用分时管理方法使所有的任务共同分享系统资源。我们讨论进程的时候,不会去关心这些进程究竟是如何分配的,或者是内核如何管理分配时间片的,我们所关心的是如何去控制这些进程,让它们能够很好地为用户服务。

    进程的一个比较正式的定义是:在自身的虚拟地址空间运行的一个单独的程序。进程与程序是有区别的,进程不是程序,虽然它由程序产生。程序只是一个静态的指令集合,不占系统的运行资源;而进程是一个随时都可能发生变化的、动态的、使用系统运行资源的程序。而且一个程序可以启动多个进程。

    Linux作系统包括三种不同类型的进程,每种进程都有自己的特点和属性。

     

    *

    交互进程——由一个shell启动的进程。交互进程既可以在前台运行,也可以在后台运行。
    *

    批处理进程——这种进程和终端没有联系,是一个进程序列。
    *

    监控进程(也称守护进程)——Linux系统启动时启动的进程,并在后台运行。

    上述三种进程各有各的作用,使用场合也有所不同。

    进程和作业的概念也有区别。一个正在执行的进程称为一个作业,而且作业可以包含一个或多个进程,尤其是当使用了管道和重定向命令。例如“nroff -man ps.1|grep kill|more”这个作业就同时启动了三个进程。

    作业控制指的是控制正在运行的进程的行为。比如,用户可以挂起一个进程,等一会儿再继续执行该进程。shell将记录所有启动的进程情况,在每个进程过程中,用户可以任意地挂起进程或重新启动进程。作业控制是许多shell(包括bash和tcsh)的一个特性,使用户能在多个独立作业间进行切换。

    一般而言,进程与作业控制相关联时,才被称为作业。

    在大多数情况下,用户在同一时间只运行一个作业,即它们最后向shell键入的命令。但是使用作业控制,用户可以同时运行多个作业,并在需要时在这些作业间进行切换。这会有什么用途呢?例如,当用户编辑一个文本文件,并需要中止编辑做其他事情时,利用作业控制,用户可以让编辑器暂时挂起,返回shell提示符开始做其他的事情。其他事情钻以后,用户可以重新启动挂起的编辑器,返回到刚才中止的地方,就象用户从来没有离开编辑器一样。这只是一个例子,作业控制还有许多其他实际的用途。

    启动进程

    键入需要运行的程序的程序名,执行一个程序,其实也就是启动了一个进程。在Linux系统中每个进程都具有一个进程号,用于系统识别和调度进程。启动一个进程有两个主要途径:手工启动和调度启动,后者是事先进行设置,根据用户要求自行启动。

    手工启动

    由用户输入命令,直接启动一个进程便是手工启动进程。但手工启动进程又可以分为很多种,根据启动的进程类型不同、性质不同,实际结果也不一样,下面分别介绍。

    1. 前台启动

    这或许是手工启动一个进程的最常用的方式。一般地,用户键入一个命令“ls –l”,这就已经启动了一个进程,而且是一个前台的进程。这时候系统其实已经处于一个多进程状态。或许有些用户会疑惑:我只启动了一个进程而已。但实际上有许多运行在后台的、系统启动时就已经自动启动的进程正在悄悄运行着。还有的用户在键入“ls –l”命令以后赶紧使用“ps –x”查看,却没有看到ls进程,也觉得很奇怪。其实这是因为ls这个进程结束太快,使用ps查看时该进程已经执行结束了。如果启动一个比较耗时的进程:

    find / -name fox.jpg

    然后再把该进程挂起,使用ps查看,就会看到一个find进程在里面。

     

     

    2. 后台启动

    直接从后台手工启动一个进程用得比较少一些,除非是该进程甚为耗时,且用户也不急着需要结果的时候。假设用户要启动一个需要长时间运行的格式化文本文件的进程。为了不使整个shell在格式化过程中都处于“瘫痪”状态,从后台启动这个进程是明智的选择。

    [例1]

    $ troff –me notes > note_form &

    [1] 4513

    $

    由上例可见,从后台启动进程其实就是在命令结尾加上一个&号。键入命令以后,出现一个数字,这个数字就是该进程的编号,也称为PID,然后就出现了提示符。用户可以继续其他工作。

    上面介绍了前、后台启动的两种情况。实际上这两种启动方式有个共同的特点,就是新进程都是由当前shell这个进程产生的。也就是说,是shell创建了新进程,于是就称这种关系为进程间的父子关系。这里shell是父进程,而新进程是子进程。一个父进程可以有多个子进程,一般地,子进程结束后才能继续父进程;当然如果是从后台启动,那就不用等待子进程结束了。

    一种比较特殊的情况是在使用管道符的时候。例如:

    nroff -man ps.1|grep kill|more

    这时候实际上是同时启动了三个进程。请注意是同时启动的,所有放在管道两边的进程都将被同时启动,它们都是当前shell的子程序,互相之间可以称为兄弟进程。

    以上介绍的是手工启动进程的一些内容,作为一名系统管理员,很多时候都需要把事情安排好以后让其自动运行。因为管理员不是机器,也有离开的时候,所以有些必须要做的工作而恰好管理员不能亲自作,这时候就需要使用调度启动进程了。

    调度启动

    有时候需要对系统进行一些比较费时而且占用资源的维护工作,这些工作适合在深夜进行,这时候用户就可以事先进行调度安排,指定任务运行的时间或者场合,到时候系统会自动完成这一切工作。

    要使用自动启动进程的功能,就需要掌握以下几个启动命令。


    [文章录入员:lpc]

    相关文章 相关书籍:
  • 山东银监局银行业金融机构高级管理人员测试系统题库
  • 基于ASP.NET的开放实验室管理系统
  • 图书管理信息系统的设计和实现
  • 简单网络管理协议SNMP
  • 电脑管理与维护清理图解
  • Visual C++ 入门到精通-数据库管理
  • SQL Server 2000 超级管理手冊
  • Oracle 数据库DBA管理手册
  • Oracle 管理员手册
  • Oracle 9i 数据库管理员指南
  • 本站推荐内容

    近期主机类热搜关键词:
    美国服务器 美国服务器租用 海外服务器租用 国外服务器租用

    Linux系列
    Win9X/ME
    Win2000
    Win2003/2008
    Unix系列
    Linux系列
    WindowsXP
    WinVista/WIN7
    注册表
    其它
    电脑教程阅读排行
    ·详解从硬盘安装linux
    ·Linux系统设置类命令大全
    ·在Linux下成功运行最新的QQ...
    ·Linux命令大全—日期时间安排
    ·如何编写Linux设备驱动程序
    ·Linux常用命令
    ·Linux与Windows硬盘资...
    ·linux下的进程管理及作业控制
    ·Linux内核模块和驱动的编写
    ·Linux中文件的压缩与解压缩