Chapter 13 守护进程

1.守护进程的特征

    守护进程也称精灵进程是生存期长的一种进程,它们常常在系统引导装入时启动,在系统管比时终止。守护进程没有控制终端,所以它们是在后台运行的。守护进程是一种很有用的进程。 Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任务。比如,作业规划进程crond,打印进程lpd等。

    所有守护进程都以超级用户(用户ID为0)的优先权运行。没有一个守护进程具有控制终端,控制名称设置为(?)、终端前台进程组ID设置为-1。除update以外的所有守护进程都是组的首进程,对话期的首进程,而且是这些进程组和对话期中的唯一进程。所以的守护进程的父进程都是init进程

    守护进程最重要的特性是后台运行。在这一点上DOS下的常驻内存程序TSR与之相似。其次,守护进程必须与其运行前的环境隔离开来。这些环境包括未关闭的文件描述符,控制终端,会话和进程组,工作目录以及文件创建掩模等。这些环境通常是守护进程从执行它的父进程(特别是shell)中继承下来的。最后,守护进程的启动方式有其特殊之处。它可以在Linux系统启动时从启动脚本/etc/rc.d中启动,可以由作业规划进程crond启动,还可以由用户终端(通常是shell)执行。

2.编程规则

1).首先做的是调用fork,然后使父进程exit

2).调用setsid以创建一个新对话期

3).将当前工作目录更改为根目录

4).将文件方式创建屏蔽字设置为0

5).关闭不再需要的文件描述符

6).某些守护进程打开/dev/null使其具有文件描述符0,1,2,这样,任何一个试图读标准输入、写标准输出或标准出错的库历程都不会产生任何效果。

3.出错记录

大多数守护进程使用syslog设施(守护进程出错记录措施)。下图显示了syslog设施的详细组织结构。

该设施的接口函数:

#include <syslog.h>

void openlog(const char *ident, int option, int facility);
void syslog(int priority, const char *format, ...);
void closelog(void);
int setlogmask(int maskpri);
//返回之前日志优先级掩码值。

4.守护进程的惯例

1).如果守护进程使用一个锁文件,那么文件通常存储在/var/run目录下。

2).如果守护进程支持配置选项,那么它们通常被存储在/etc目录中。

3).守护进程可以通过命令行启动,但是通常它们是由系统初始化脚本之一(/etc/rc*或/etc/init.d/*)启动的

4).如果一守护进程有一个配置文件,那么当该守护进程启动时,它读该文件,但是此之后一般就不会再次查看它

原文地址:https://www.cnblogs.com/biyeymyhjob/p/2622966.html