1、概念:是运行在后台,并确一直在运行的特殊进程,独立于控制终端并确周期性的执行某种任务或等待处理某些发生的事件。
2、特点:(1)运行在后台。
        (2)必须与其运行前的环境(为关闭的文件描述符、控制终端、会话、进程组、工作目录、文件创建掩码等)隔离开来。
        (3)启动时从启动脚本/etc/rc.d或作业规划进程crond或用户终端(shell)启动执行。
3、用途:提供后台服务。
4、编写流程:(1)创建子进程、终止父进程。
           (2)使用系统函数setsid在子进程中创建新会话。
           (3)使用chdir改变工作目录.
           (4)使用umask函数重设文件创建掩码。
           (5)关闭文件描述符。
5、例:函数每个10秒想/tmp目录中的日志example.log报告运行状态。

#include<stdio.h>
 #include<time.h>
 #include<unistd.h>
 #inlcude<signal.h>
 #inlcude<sys/param.h>
 #include<sys/types.h>
 #include<sys/stat.h>
 void init_daemon(void); /*守护进程初始化函数*/
 int main()
 {
     FILE *fp;
     time_t t;
     init_daemon();
     while(1)
     {
         sleep(10);
         if((fp=fopen(example.log,a+))>=0)
         {
             t=time(0);
             fprintf(fp,"守护进程还在运行,时间是:%s\n",asctime(localtime(&t)));
             fclose(0);
         }
     }
 }
 void init_daemon(void)
 {
     pid_t child1,child2;
     int i;
     child1=fork();       /*创建子进程*/
     if(child1<0)
     {
         perror("创建子进程失败\n");
         exit(1);
     }
     else if(child1>0)  /*结束父进程*/
         exit(0);
     setsid();    /*创建新会话,并担任该会话组的组长*/
     chdir("/tmp"); /*改变工作目录到/tmp下*/
     umask(0);       /*重设文件创建掩码*/
     for(i=0;i<NOFILE;i++)  /*关闭文件描述符*/
         close(i);
 }