生成守护进程

Posted on 2012-05-18 10:19  逝水如年  阅读(198)  评论(0)    收藏  举报
/*setid.c*/
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
//要创建守护进程,但是守护进程不能为程序的第一个进程,该进程不能为进程组的leader
int main (void)
{
    //首先fork一个子进程作为setsid的leader进程
    pid_t p = fork();
    if (p < 0) {
        perror("fork error");
        exit(1);
    }
    
    //发现是父进程就直接退出
    if (p != 0) {
        exit(1);
    } else {
        //在子进程处创建session_id
        setsid();
    }
    
    /*
     * 将文件描述符0,1,2重新定位到/dev/null,切换文件访问目录到’/‘根目录下
     * 同样的操作被一个函数包装:
     * chdir(“/”)
     * close(0)
     * open("/dev/null", O_RDWR)
     * dup2(0, 1)
     * dup2(0, 2)
     */
    daemon(0, 0);
    while(1);   //不断的穷忙
}

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3