1.
创建孤儿进程:所有的工作都在子进程中进行,形式上脱离终端控制;
fork();
父进程退出,保留子进程
2.
创建新的会话组:使子进程完全独立,脱离控制。
子进程使用新的会话组
id
,就不在依附于父进程的会话了
setsid
函数
3.
修改当前孤儿进程的运行目录为根目录:防止占用可卸载的文件系统,可以换成别的不能卸载的目
录下。
/tmp
chdir
函数
4.
重设文件权限掩码,一般保留文件原有权限。
umask(0);
5.
关闭所有文件描述符:子进程的文件描述符是从父进程继承过来的,包括
0,1,2
#include<stdio.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<sys/types.h>
#include<unistd.h>
int main(int argc, const char *argv[])
{
if(fork()==0)
{
//创建新的会话组
pid_t sid=setsid();
printf("sid=%d\n",sid);
//修改运行目录
chdir("/");
//修改权限掩码
umask(0);
//关闭文件描述符
for(int i=0;i<1024;i++)
{
close(i);
}
//守护进程
while(1){sleep(1);}
}
else
{
perror("fork");
return -1;
}
return 0;
}