守护进程是什么?就是在后台运行的进程。
那么如何创建守护进程呢?
1. 创建孤儿进程
2. setsid() 创建进程会话
3. 重定向标准输入, 标准输出
4. chdir, 改当当前进程的工作目录
接下来看一个例子:
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
int main(void)
{
//进程成为守护进程的步骤
//代号:Ss
//守护进程也称为精灵进程
//1.产生孤儿进程
pid_t pid ;
int fd ;
pid = fork();
if(0 == pid)
{
//2.改变工作目录
chdir("/");
//3.成为进程组长
setsid();
//4 1>.关闭标准输入,输出,出错
//close(0);
//close(1);
//close(2);
//2> 重定向
fd = open("/dev/null" , O_RDWR);
if(-1 == fd)
{
perror("Open null file fail");
return -1 ;
}
//禁掉标准输入,输出,出错,不然输出的东西会在终端乱喷
//Ctrl + C 无效
dup2(fd , 0);
dup2(fd , 1);
dup2(fd , 2);
while(1)
{
//main event loop
printf("hello world \n");
sleep(1);
}
return 0 ;
}
//父进程直接退出
return 0 ;
}