static void daemonize(void) {
#ifdef SIGTTOU
signal(SIGTTOU, SIG_IGN);
#endif
#ifdef SIGTTIN
signal(SIGTTIN, SIG_IGN);
#endif
#ifdef SIGTSTP
signal(SIGTSTP, SIG_IGN);
#endif
if (0 != fork()) exit(0); //孤儿进程,init进程接管(1)
if (-1 == setsid()) exit(0);//进程成为新的会话组长和新的进程组长,并与原来的登录会话和进程组脱离。由于会话过程对控制终端的独占性,进程同时与控制终端脱离。
signal(SIGHUP, SIG_IGN);
if (0 != fork()) exit(0); //守护进程,彻底失去获取会话可能
if (0 != chdir("/")) exit(0);
#ifdef SIGTTOU
signal(SIGTTOU, SIG_IGN);
#endif
#ifdef SIGTTIN
signal(SIGTTIN, SIG_IGN);
#endif
#ifdef SIGTSTP
signal(SIGTSTP, SIG_IGN);
#endif
if (0 != fork()) exit(0); //孤儿进程,init进程接管(1)
if (-1 == setsid()) exit(0);//进程成为新的会话组长和新的进程组长,并与原来的登录会话和进程组脱离。由于会话过程对控制终端的独占性,进程同时与控制终端脱离。
signal(SIGHUP, SIG_IGN);
if (0 != fork()) exit(0); //守护进程,彻底失去获取会话可能
if (0 != chdir("/")) exit(0);
}