关于守护进程可以查看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 }