嵌入式系统之linux系统编程---16 守护进程

1、什么是守护进程?

守护进程—守护进程运行在后台,不跟任何控制终端关联。

2.怎么创建一个守护进程?

有两个基本要求:

a.守护进程必须作为 init 进程的子进程
b.守护进程不跟控制终端交互。

创建守护进程的步骤:
1.使用 fork 函数创建一个新的进程,然后让父进程使用 exit 函数直接退出(必须要的)
2.调用 setsid 函数。(必须要的)

调用setsid函数来比摆脱原来进程组的控制,摆脱原来的控制终端的控制。

3.调用 chdir 函数,将当前的工作目录改成根目录,增强程序的健壮性。(不是必须要的)
4.重设我们 umask 文件掩码,增强程序的健壮性和灵活性(不是必须要的)
5.关闭文件描述符,节省资源(不是必须要的)
6.执行我们需要执行的代码(必须要的)
步骤1,2,6均为必要步骤。
补充:进程组与会话的概念
在这里插入图片描述

3、创建守护进程测试代码

根据创建守护进程自己创建一个守护进程,c代码如下:

#include <stdio.h> 
#include <unistd.h> 
#include <stdlib.h> 
#include <sys/wait.h> 
#include <sys/types.h> 
#include <sys/stat.h> 
int main(void) 
{ 
	pid_t pid; // 步骤一:创建一个新的进程 
	pid = fork(); //父进程直接退出 
	if (pid > 0) 
	{ 
		exit(0);
	}
	if (pid == 0) 
	{ 
		// 步骤二:调用 setsid 函数摆脱控制终端
		setsid(); // 步骤三:更改工作目录 ,此处将工作目录改为了根目录
		chdir("/"); 
		// 步骤四:重新设置 umask 文件源码 ,此时需要包含两个头文件,且将umask的值写为0(这里umask的值可以随意设置)
		umask(0); // 步骤五:0 1 2 三个文件描述符 
		close(1); 
		close(2); 
		close(3); // 步骤六:执行我们要执行的代码 ,这里使用while循环
		while (1) {} 
	}
	return 0;
}

在ubuntu界面的运行结果如下:
在编译结束显示没有问题之后,开始执行该守护进程的可执行文件,此时终端是没有被占用的。由于创建的是守护进程,守护进程是在后台运行的,是不与控制终端关联的。所以说控制终端虽然可以用,但是“shouhu”进程是一直在后台运行的。在ubuntu界面使用管道命令查看,可以看到创建的守护进程正在运行,守护进程的创建是成功的。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值