unix 守护程序的编写

这几天在学习编写Unix下的程序,在这里贴出一个方法示例:

#include<unistd.h>
#include<stdlib.h>
#include<signal.h>
#include<sys/param.h>
#include<sys/types.h>
#include<sys/stat.h>

void init_venes(void)
{
    int pid;
    int i;

    /*   忽略终端I/O,STOP信息号  */
    signal(SIGTTOU, SIG_IGN);
    signal(SIGTTIN, SIG_IGN);
    signal(SIGTSTP, SIG_IGN);
    signal(SIGHUP,  SIG_IGN);

    if((pid=fork()) > 0)
    {
        exit(0);    /*是父进程,结束父进程*/
    }
    else if(pid<0)
    {
        exit(1);    /*fork失败,退出*/
    }

    setsid();       /*第一子进程成为新的会话组长和进程组长*/
    if((pid=fork()) > 0)
    {
        exit(0);    /*是第一子进程,结束第一子进程*/
    }
    else if(pid<0)
    {
        exit(1);    /*fork失败,退出*/
    }

    for(i=0; i<NOFILE; ++i)
        close(i);   /*关闭打开的文件描述符*/
    chdir("/tmp");  /*改变工作目录到/tmp,以防止关机时某些设备忙碌的问题*/
    umask(0);       /*重设文件创建掩模*/
    signal(SIGCHLD, SIG_IGN);    /*  忽略SIGCHLD信号  */
    return;
}

程序里都做了注释,这个方法其实是根据网上其它作者的改写的,贴在这里记录一下,以免忘记!