守护进程相当于一个服务,不依赖于任何终端而存在,随着系统的启动而启动
守护进程的创建分为以下5个步骤
1、创建子进程,让其成为孤儿进程:fork;exit
2、将自己设置成会话组组长,不依赖终端:setsid
3、更改造作目录为根目录:chdir
4、设置文件操作权限:umask
5、将标准输入、输出、出错文件描述符重定向到指定文件中去:dup2
代码实现:
#include<myhead.h>
int main(int argc, const char *argv[])
{
//1、产生孤儿进程
pid_t pid = fork();
if(pid < 0)
{
perror("fork error");
return -1;
}
else if(pid > 0)
{
//父进程,直接退出
exit(EXIT_SUCCESS);
}
//2、将自己设置成会话组组长
setsid();
//3、更改操作目录为根目录
chdir("/");
//4、获得创建文件的最大权限
umask(0);
//5、将标准输入、输出、出错重定向到文件中
int fd = open("./log.txt", O_WRONLY|O_APPEND|O_CREAT, 0664);
if(-1 == fd)
{
perror("open error");
return -1;
}
//重定向
dup2(fd, STDIN_FILENO);
dup2(fd, STDOUT_FILENO);
dup2(fd, STDERR_FILENO);
//循环实现操作
while(1)
{
printf("hello a\n");
fflush(stdout);
sleep(1);
}
//关闭文件
close(fd);
return 0;
}