【操作系统】如何创建一个守护进程

守护进程(Daemon)是一类在后台运行的特殊进程,它们通常不与任何终端或用户直接交互,而是执行特定的系统任务或等待系统或网络事件的发生。守护进程是操作系统中不可或缺的一部分,它们负责执行各种后台任务,如系统日志记录、文件系统管理、网络服务等。

 创建一个守护进程的步骤:

1、让程序在后台执行

fork出一个子进程,父进程退出

int main(){if(::fork()){return 0;}return 0;
}

2、创建一个新会话摆脱原来的登录会话、进程组和控制终端的影响

int main(){if(::fork()){return 0;}int sid=::setsid();return 0;
}

3、禁⽌进程重新打开控制终端

进程已经成为⼀个⽆终端的会话组⻓,但是它可以重新申请打开⼀个终端。为了避免这种情况发⽣,可以通过使进程不再是会话组⻓来实现。

目的:避免终端对该程序的影响

int main(){if(::fork()){return 0;}int sid=::setsid();if(::fork()){return 0;}return 0;
}

4、关闭不再需要的⽂件描述符

目的:避免资源浪费

int main(){if(::fork()){return 0;}int sid=::setsid();if(::fork()){return 0;}for(int fd=0;fd<syscall(_SC_OPEN_MAX);++fd){close(fd);}return 0;
}

5、将当前⽬录更改为根⽬录

int main(){if(::fork()){return 0;}int sid=::setsid();if(::fork()){return 0;}for(int fd=0;fd<syscall(_SC_OPEN_MAX);++fd){close(fd);}chdir("/");return 0;
}

6、屏蔽字清零

目的:避免⼦进程从⽗进程继承的⽂件创建屏蔽字可能会拒绝某些许可权的影响

int main(){if(::fork()){return 0;}int sid=::setsid();if(::fork()){return 0;}for(int fd=0;fd<syscall(_SC_OPEN_MAX);++fd){close(fd);}chdir("/");umask(0);return 0;
}

7、处理SIGCHLD信号

Linux 系统中,当一个子进程结束时,它会发送 SIGCHLD 信号给父进程。如果父进程没有处理这个信号,子进程不会立即从系统中消失,而是变成一个僵尸进程(zombie process)。僵尸进程会保留在系统中,直到父进程读取其状态信息,这通常是通过 wait()waitpid() 系统调用完成的。

僵尸进程会占用系统资源,比如进程表中的条目,尽管它们不再消耗 CPU 或内存资源。如果服务器进程频繁地生成子进程,且每个子进程都需要父进程去处理 SIGCHLD 信号,这确实会增加父进程的负担,影响服务器的并发性能。

为了避免这种情况,服务器进程可以忽略 SIGCHLD 信号,这样子进程结束时就不会变成僵尸进程。这可以通过设置 SIGCHLD 信号的处理行为为 SIG_IGN 来实现。

int main(){if(::fork()){return 0;}int sid=::setsid();if(::fork()){return 0;}for(int fd=0;fd<syscall(_SC_OPEN_MAX);++fd){close(fd);}chdir("/");umask(0);signal(SIGCHLD, SIG_IGN);return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/497352.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pyqt和pycharm环境搭建

安装 python安装&#xff1a; https://www.python.org/downloads/release/python-3913/ python3.9.13 64位(记得勾选Path环境变量) pycharm安装&#xff1a; https://www.jetbrains.com/pycharm/download/?sectionwindows community免费版 换源&#xff1a; pip config se…

Lottie动画源码解析

Lottie是一个很成熟的开源动画框架&#xff0c;它支持直接使用从AE导出的动画文件&#xff0c;在不同平台均可快速使用&#xff0c;大大减轻了程序员的工作量&#xff0c;也让复杂的动画成为可能。该动画文件使用Json格式来描述内容&#xff0c;可以大大缩减文件的体积。在Andr…

Cadence学习笔记 16 HDMI接口布局

基于Cadence 17.4&#xff0c;四层板4路HDMI电路 更多Cadence学习笔记&#xff1a;Cadence学习笔记 1 原理图库绘制Cadence学习笔记 2 PCB封装绘制Cadence学习笔记 3 MCU主控原理图绘制Cadence学习笔记 4 单片机原理图绘制Cadence学习笔记 5 四路HDMI原理图绘制Cadence学习笔记…

微服务篇-深入了解 MinIO 文件服务器(你还在使用阿里云 0SS 对象存储图片服务?教你使用 MinIO 文件服务器:实现从部署到具体使用)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 MinIO 文件服务器概述 1.1 MinIO 使用 Docker 部署 1.2 MinIO 控制台的使用 2.0 使用 Java 操作 MinIO 3.0 使用 minioClient 对象的方法 3.1 判断桶是否存在 3.2…

logback之pattern详解以及源码分析

目录 &#xff08;一&#xff09;pattern关键字介绍 &#xff08;二&#xff09;源码分析 &#xff08;一&#xff09;pattern关键字介绍 %d或%date&#xff1a;表示日期&#xff0c;可配置格式化%d{yyyy-MM-dd HH:mm:ss} %r或%relative&#xff1a;也是日期&#xff0c;不过…

【期末复习】JavaEE(下)

1. MVC开发模式 1.1. 运行流程 1.2. SpringMVC 核心组件 1.3. 注解解释 2. ORM与MyBatis 2.1. ORM—对象关系映射 2.2. MyBatis 2.2.1. 创建步骤 会话是单例的&#xff0c;不能跨方法。&#xff08;单例的原因主要是从数据安全角度出发&#xff09; import org.apache.ibatis…

作业帮基于 Apache DolphinScheduler 3_0_0 的缺陷修复与优化

文|作业帮大数据团队&#xff08;阮文俊、孙建业&#xff09; 背 景 基于 Apache DolphinScheduler &#xff08;以下简称DolphinScheduler&#xff09;搭建的 UDA 任务调度平台有效支撑了公司的业务数据开发需求&#xff0c;处理着日均百万级别的任务量。 整个 UDA 的架构如…

电脑缺失sxs.dll文件要怎么解决?

一、文件丢失问题&#xff1a;以sxs.dll文件缺失为例 当你在运行某个程序时&#xff0c;如果系统提示“找不到sxs.dll文件”&#xff0c;这意味着你的系统中缺少了一个名为sxs.dll的动态链接库文件。sxs.dll文件通常与Microsoft的.NET Framework相关&#xff0c;是许多应用程序…

Web开发:ORM框架之使用Freesql的分表分页写法

一、自动分表&#xff08;高版本可用&#xff09; 特性写法 //假如是按月分表&#xff1a;[Table(Name "log_{yyyyMM}", AsTable "createtime2022-1-1(1 month)")]注意&#xff1a;①需包含log_202201这张表 ②递增规律是一个月一次&#xff0c;确保他们…

【数据结构与算法】单向链表

一、什么是链表 链表由一系列节点组成&#xff0c;每个节点都包含一个 data 域&#xff08;存放数据&#xff09;和一个 next 域&#xff08;指向下一节点&#xff09;。链表中的节点可以按照任意顺序存放在内存中&#xff0c;它们之间并不连续。每个节点都记录了下一个节点的地…

【ACCSS】2024年亚信安全云认证专家题库

文件包含&#xff1a; 亚信安全ACCSS认证2019年真题&#xff08;1&#xff09; 亚信安全ACCSS认证2019年真题&#xff08;2&#xff09; 亚信安全ACCSS认证2019年真题&#xff08;3&#xff09; 亚信安全ACCSS认证2020年真题&#xff08;1&#xff09; 亚信安全ACCSS认证2020年…

OpenCV-Python实战(10)——形态学

1、腐蚀 cv2.erode() 可以删除图像中的噪音点。 可以删除毛边。 分割图像&#xff08;当图像连接的不够紧密时&#xff09; 。 img cv2.erode(src*,kernel*,anchor*,iterations*,borderType*,borderValue*)img&#xff1a;目标图像。 src&#xff1a;原始图像。 kernel&…

用VBA将word文档处理成支持弹出式注释的epub文档可用的html内容

有一种epub文件&#xff0c;其中的注释以弹窗形式显示&#xff0c;如下图&#xff1a; 点击注释引用后&#xff0c;对应的注释内容会弹出在页面中显示&#xff0c;再次点击弹窗外的任意位置该弹窗即关闭&#xff0c;关闭后点击任意注释引用&#xff0c;对应的注释内容会弹窗显示…

Ngnix介绍、安装、实战及用法!!!

一、Nginx简介 1、Nginx概述 Nginx (“engine x”) 是一个高性能的 HTTP 和 反向代理服务器&#xff0c;特点是占有内存少&#xff0c;并发能力强&#xff0c;能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数 。 2、正向代理 正向代理&#xff1a;如果把局…

【超详细】Git的基本概念和基本使用方式

Git是程序开发中非常重要的工具&#xff0c;是一种分布式版本控制系统&#xff0c;可用于管理和追踪软件开发过程中的变化。那么关于Git的基本操作你知道吗&#xff1f;下面是Git的基本概念和使用方式的解释&#xff1a; 仓库&#xff08;Repository&#xff09;&#xff1a;Gi…

springboot503基于Sringboot+Vue个人驾校预约管理系统(论文+源码)_kaic

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装个人驾校预约管理系统软件来发挥其高效地信息处理的作用&am…

【Rust自学】7.4. use关键字 Pt.2 :重导入与换国内镜像源教程

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 7.4.1. 使用pub use重新导入名称 使用use将路径导入作用域内后。该名称在词作用域内是私有的。 以上一篇文章的代码为例&#xff1a; m…

Pandas03

Pandas01 Pandas02 文章目录 内容回顾1 排序和统计函数2 缺失值处理2.1 认识缺失值2.2 缺失值处理- 删除2.3 缺失值处理- 填充非时序数据时序数据 3 Pandas数据类型3.1 数值类型和字符串类型之间的转换3.2 日期时间类型3.3 日期时间索引 4 分组聚合4.1 分组聚合的API使用4.2 分…

平凉一窝丝:丝丝缕缕的舌尖风情

在平凉的美食版图中&#xff0c;食家巷一窝丝以其独特的工艺和诱人的口感&#xff0c;占据着重要的一席之地&#xff0c;成为了平凉人心目中的经典美食之一。从外观上看&#xff0c;平凉食家巷一窝丝如同一盘精心雕琢的金丝&#xff0c;根根细丝紧密盘绕&#xff0c;整齐而美观…

Wordly Wise 3000 国际背单词01 介绍 + 测词汇量

&#x1f4da; Wordly Wise 3000 国际背单词01 介绍 测词汇量 &#x1f31f; 大家好&#xff01;我们正式启动背Wordly Wise 3000单词&#xff0c;旨在利用国际资源和科学的学练方法&#xff0c;帮助大家更得效地坚持学练单词。我们将通过图文和Video等多种形式与大家分享经验…