C++ 守护进程
阅读(6418)创建守护进程步骤
- 创建子进程,父进程退出
- 在子进程中创建新会话
- 改变当前目录为根目录
- 重设文件权限掩码
- 关闭文件描述符
- 守护进程退出处理
父进程退出后,子进程调用setsid()。它完成了daemon函数想要做的大部分事情。调用完整个函数。子进程成为会话组长(sid==pid),也是进程组组长(pgid == pid),并且脱离了原来控制终端。但是,仍然可以对原来的终端进行读写,如果想彻底使得进程脱离终端,即让stdin,stdout,stderr失效,则可以再次利用原来进程创建第三个进程,然后终止第二个进程。此时,不会再对原来的终端有读写能力。
附代码
void Damon()
{
pid_t pid;
if ((pid = fork()) != 0)
{
exit(0);
}
setsid();
signal(SIGINT, SIG_IGN);
signal(SIGHUP, SIG_IGN);
signal(SIGQUIT, SIG_IGN);
signal(SIGPIPE, SIG_IGN);
signal(SIGTTOU, SIG_IGN);
signal(SIGTTIN, SIG_IGN);
signal(SIGCHLD, SIG_IGN);
signal(SIGTERM, SIG_IGN);
//第二次fork
if ((pid = fork()) != 0)
{
exit(0);
}
chdir("/");
umask(0);
}