Linux系统编程---守护进程

时间:2022-04-20 16:30:06

守护进程是什么?就是在后台运行的进程。

那么如何创建守护进程呢?

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 ;
}