IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 基于VS2019 C++的跨平台(Linux)开发(1.3.2)——进程管理 -> 正文阅读

[系统运维]基于VS2019 C++的跨平台(Linux)开发(1.3.2)——进程管理

五、守护进程

守护进程,也就是通常所说的精灵进程,是Linux中的后台服务进程,生存期较长的进程,通常独立于控制终端并且周期性的执行某种任务或者等待处理某些发生的事情。

守护进程是在后台运行不受终端控制的进程;是能自动转到后台并且脱落与终端的联系;linux系统中一般有很多守护进程在后台运行 ,执行不同的管理任务。

守护进程的特性:

  • 后台运行
  • 必须与运行钱的环境隔离开来
  • 启动方式尤其特殊之处

守护进程运行环境:

包括未关闭的文件描述符、控制终端、会话和进程组,工作目录以及文件创建掩膜等

这些环境通常是守护进程从执行它的父进程中继承下来的(特别是shell)

守护进程的启动方法:

1、在系统启动时很多守护进程都是由系统初始化脚本启动,这些脚本一般在etc目录以及etc/rc开头的目录下,他们的位置和内容依赖于具体的实现

2、许多网络服务器由inetd超级服务器启动的,inetd是由系统初始化脚本启动的

3、corn守护进程按规则定期执行一些程序,由它启动的程序也以守护进程的方式运行,corn是由系统初始化脚本启动

4、不管是在前台还是在后台,守护进程也可以在用户终端上启动

守护进程编程步骤:

1、创建子进程,父进程退出;所有工作在子进程中进行;形式上脱离了控制终端

2、在子进程中创建新会话;setsid函数;使用子进程完全独立出来,脱离控制

3、改变当前目录为根目录;chdir函数;防止占用可卸载的文件系统;也可以换成其他路径

4、重设文件权限掩码;umask函数;防止继承的文件创建屏蔽字拒绝某些权限;增加守护进程灵活性

5、关闭文件描述符;继承的打开文件用不到,浪费系统资源,无法卸载;getdtablesize函数;

返回所在进程的文件描述表的项数,即这个进程打开的文件数目

6、开始执行守护进程核心工作

7、 守护进程退出处理

#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>

void daemon(void)
{
	pid_t pid;
	
	//成为一个新会话的首进程,失去控制终端
	
	if ((pid = fork()) < 0) {
		perror("fork");
		exit(1);
	}
    /* parent */
     else if (pid != 0) 
		exit(0);
	setsid();
	
	//改变当前工作目录到/根目录下
	
	if (chdir("/") < 0) {
		perror("chdir");
		exit(1);
	}
	/* 设置umask为0 */
	umask(0);
	
	//重定向0,1,2文件描述符到 /dev/null,因为已经失去控制终端,再操作0,1,2没有意义.
	
	close(0);
	open("/dev/null", O_RDWR);
	dup2(0, 1);
	dup2(0, 2);
}
int main(void)
{
    //调用守护进程函数
	daemon();
    //在此循环中可以实现守护进程的核心工作
	while(1); 
}

注意:

变成一个守护进程之后不再和当前终端关联。运行带x参数的ps命令可以看到。此外,用户关闭终端窗口或者注销也不影响守护进程的运行。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-03-15 23:07:58  更:2022-03-15 23:09:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 2:41:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码