如何创建一个守护进程?
需要最主要的是:为什么会需要两次fork()?因为,第一次fork()将父进程的会话期、进程组相关信息进行了copy,所以这时候的子进程还不能算是独立进程组之外的进程,所以需要将子进程独立处理,所以调用setsid()先判断子进程是否是进程组的组长,如果是之前进程组的组长,那么调用失败,否则调用成功,子线程成为新的进程组组长。这时候调用fork(),将父进程退出,子进程完全独立,不受终端控制。修改一下运行目录,chdir("/"),设置文件权限掩码,也就是初始化文件的权限。关掉不相关的文件描述符。
//创建守护进程
#include<stdio.h>
#include<signal.h>
#include<string.h>
#include<unistd.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<time.h>
void create_daemom()
{
pid_t pid;
pid=fork();
if(pid==-1)
{
printf("error fork");
}
else if(pid)//父进程直接退出
{
exit(1);
}
if(setsid()==-1)
{
exit(1);
}
pid=fork();
if(pid==-1)
{
printf("error fork");
}
else if(pid)
{
exit(1);
}
for(int i=0;i<3;i++)
{
close(i);
}
umask(0);
}
int main()
{
return 0;
}