守护进程(大地小神之个人收藏).doc
上传人:qw****27 上传时间:2024-09-12 格式:DOC 页数:13 大小:44KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

守护进程(大地小神之个人收藏).doc

守护进程(大地小神之个人收藏).doc

预览

免费试读已结束,剩余 3 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

守护进程守护进程是生存期长的一种进程。它们独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。他们常常在系统引导装入时启动,在系统关闭时终止。unix系统有很多守护进程,大多数服务器都是用守护进程实现的。比如,网络服务inetd、Web服务http等。同时,守护进程完成许多系统任务。比如,作业规划进程crond、打印进程lqd等。这里主要说明守护进程的进程结构,以及如何编写守护进程程序。因为守护进程没有控制终端,所以我们还要介绍在守护进程运行时错误输出的方法。守护进程及其特性守护进程最重要的特性是后台运行。在这一点上,DOS下的常驻内存程序TSR与之相似。其次,守护进程必须与其运行前的环境隔离开来。这些环境包括未关闭的文件描述符、控制终端、会话和进程组、工作目录以及文件创建掩码等。这些环境通常是守护进程从执行它的父进程(特别是shell)中继承下来的。最后,守护进程的启动方式有其特殊之处。它可以在系统启动时从启动脚本/etc/rc.d中启动,可以由inetd守护进程启动,可以有作业规划进程crond启动,还可以由用户终端(通常是shell)执行。总之,除开这些特殊性以外,守护进程与普通进程基本上没有什么区别。因此,编写守护进程实际上是把一个普通进程按照上述的守护进程的特性改造成为守护进程。如果大家对进程的认识比较深入,就对守护进程容易理解和编程了。首先我们来察看一些常用的系统守护进程,看一下他们和几个概念:进程组、控制终端和对话期有什么联系。ps命令打印系统中各个进程的状态。该命令有多个选择项,有关细节请参考系统手册。为了察看所需的信息,执行:ps–axjPPIDPIDPGIDSIDTTYTPGIDSTATUIDTIMECOMMAND0100?-1S00:04init0211?-1SW00:00[keventd]1311?-1SW00:00[kapm-idled]0511?-1SW00:00[kswapd]进程号为1、2的这些进程非常特殊,存在于系统的整个生命期中。它们没有父进程ID,没有组进程ID,也没有对话期ID(?)。syslogd守护进程可用于任何为操作人员记录系统消息的程序中。可以在一台实际的控制台上打印这些消息,也可将它们写到一个文件中。sendmail是标准邮递守护进程。update程序定期将内核缓存中的内容写到硬盘上(通常是每隔30秒)。为了做到这一点,该程序每隔30秒调用sync(2)函数一次。cron守护进程在指定的日期和时间执行指定的命令。许多系统管理任务是由cron定期地使相关程序执行而得以实现的。inetd进程监听系统的网络界面,以输入对各种网络服务器的请求。最后一个守护进程,lpd处理对系统提出的各个打印请求。注意,所有守护进程都以超级用户(用户ID为0)的优先权运行。没有一个守护进程具有控制终端,终端名称设置为问号(?)、终端前台进程组ID设置为-1。缺少控制终端是守护进程调用了setsid的结果。除update以外的所有守护进程都是进程组的首进程,对话期的首进程,而且是这些进程组和对话期中的唯一进程。最后,应当引起注意的是所有这些守护进程的父进程都是init进程。在接触实际编程前,我们来看看编写守护进程要碰到的概念:进程组合会话期。进程组每个进程除了有一进程ID之外,还属于一个进程组(在讨论信号时就会涉及进程组)进程组是一个或多个进程的集合。每个进程有一个唯一的进程组ID。进程组ID类似于进程ID——它是一个正整数,并可存放在pid_t数据类型中。每个进程组有一个组长进程。组长进程的标识是其进程组ID等于其进程ID,进程组组长可以创建一个进程组,创建该组中的进程,然后终止,只要在某个进程组中有一个进程存在则该进程就存在,这与其组长进程是否终止无关。从进程组创建开始到其中最后一个进程离开为止的时间区间称为进程组的生命期。某个进程组中的最后一个进程可以终止,也可以参加另一进程组。前面已经提到进程调用setgid可以参加一个现存的组或者创建一个新进程组(setsid也可以创建一个新的进程组,后面将用到)会话期会话期(session)是一个或多个进程组的集合。其中,在一个会话期中有3个进程组,通常是有shell的管道线将几个进程编成一组的。会话期和进程组的一些特性:一个会话期可以有一个单独的控制终端(controllingterminal),这一般是我们在其上登录的终端设备(终端登录)或伪终端设备(网络登录),但这个控制终端并不是必需的。建立与控制终端连接的会话期首进程,被称之为控制进程(contronllingprocess)。以及一个会话期中的几个进程组可被分为一个前台进程组(foregroundprocessgroup)以及一个或几个后台进程组(background