daemon_init函数:调用该函数把普通进程转变为守护进程

Posted soldierback

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了daemon_init函数:调用该函数把普通进程转变为守护进程相关的知识,希望对你有一定的参考价值。

#include    <unistd.h>
#include    <syslog.h>
#include    <fcntl.h>
#include    <signal.h>

#define    MAXFD    64

extern int    daemon_proc;      /* defined in error.c */

int daemon_init(const char *pname, int facility)
{
    int        i;
    pid_t    pid;

    if ( (pid = fork()) < 0)
        return (-1);
    else if (pid)
        _exit(0);               /* parent terminates */

    /* child 1 continues... */

    if (setsid() < 0)           /* become session leader */
        return (-1);

    signal(SIGHUP, SIG_IGN);
    if ( (pid = fork()) < 0)
        return (-1);
    else if (pid)
        _exit(0);               /* child 1 terminates */

    /* child 2 continues... */

    daemon_proc = 1;            /* for err_XXX() functions */

    chdir("/");                 /* change working directory */

    /* close off file descriptors */
    for (i = 0; i < MAXFD; i++)
        close(i);

    /* redirect stdin, stdout, and stderr to /dev/null */
    open("/dev/null", O_RDONLY);
    open("/dev/null", O_RDWR);
    open("/dev/null", O_RDWR);

    openlog(pname, LOG_PID, facility);

    return (0);                 /* success */
}

 

以上是关于daemon_init函数:调用该函数把普通进程转变为守护进程的主要内容,如果未能解决你的问题,请参考以下文章

信号之sigsetjmp和siglongjmp函数(转)

进程间通信的方式(转)

[转]JS 中 this 关键字详解

进程 线程

os.fork()----linux

进程控制---fork函数