关于守护进程可以查看apue的笔记 http://www.cnblogs.com/runnyu/p/4645046.html

 

 

daemon_init函数

下面给出名为daemon_init函数,通过调用它(通常从服务器程序中),我们能够把一个普通进程转变为守护进程

 1 #include    "unp.h"
 2 #include    <syslog.h>
 3 
 4 #define    MAXFD    64
 5 
 6 extern int    daemon_proc;    /* defined in error.c */
 7 
 8 int
 9 daemon_init(const char *pname, int facility)
10 {
11     int        i;
12     pid_t    pid;
13 
14     if ( (pid = Fork()) < 0)
15         return (-1);
16     else if (pid)
17         _exit(0);            /* parent terminates */
18 
19     /* child 1 continues... */
20 
21     if (setsid() < 0)            /* become session leader */
22         return (-1);
23 
24     Signal(SIGHUP, SIG_IGN);
25     if ( (pid = Fork()) < 0)
26         return (-1);
27     else if (pid)
28         _exit(0);            /* child 1 terminates */
29 
30     /* child 2 continues... */
31 
32     daemon_proc = 1;            /* for err_XXX() functions */
33 
34     chdir("/");                /* change working directory */
35 
36     /* close off file descriptors */
37     for (i = 0; i < MAXFD; i++)
38         close(i);
39 
40     /* redirect stdin, stdout, and stderr to /dev/null */
41     open("/dev/null", O_RDONLY);
42     open("/dev/null", O_RDWR);
43     open("/dev/null", O_RDWR);
44 
45     openlog(pname, LOG_PID, facility);
46 
47     return (0);                /* success */
48 }
View Code

相关文章: