linux中每一个终端建立的进程都依赖于终端.终端关闭,终端建立的进程也自动关闭.
所以需要后台运行的进程需要脱离终端的控制,变成没有终端与之相连的进程----守护进程
void daemon()
{
pid = fork();
if(pid > 0)//结束父进程(受终端控制的进程),使子进程成为后台程序
{
exit(0);
}
if(pid < 0)
{
return -1;
}
setsid();//建立新的进程组,使子进程成为进程组的会话组长,子进程脱离所有终端.
signal(SIGHUP,SIG_IGN);//忽略stop信号
pid = fork();
if(pid > 0)//再次结束父进程新建子进程,并保证子进程不会成为进程组的会话组长,使之无法打开一个新的终端
{
exit(0);
}
if(pid < 0)
{
return -1;
}
chdir("/");//更改目录
umask(022);//赋予子进程全部权限
}