【Linux取经路】守护进程

在这里插入图片描述

文章目录

  • 一、前台进程和后台进程
  • 二、Linux 的进程间关系
  • 三、setsid——将当前进程设置为守护进程
  • 四、daemon——设置为守护进程
  • 五、结语

一、前台进程和后台进程

image-20240320212621951

Linux 中每一次用户登录都是一个 session,一个 session 中只能有一个前台进程在运行,键盘信号只能发送给前台进程,其中谁拥有键盘文件谁就是前台进程。./process & 表示启动一个后台进程,后台进程和前台进程可以同时向显示器进行打印。

image-20240320213543544

jobs 查看后台进程。

image-20240320213642676

fg 后台任务号 将一个后台进程提到前台。如果 ctrl+z 将一个前台进程给暂停了,那么操作系统会把 bash 提到前台来,并且把暂停的进程放到后台。在命令行中前台进程一定要存在。bg 后台任务号 将一个因为暂停而被放到后台的任务重新启动,启动后是在后台运行。

二、Linux 的进程间关系

image-20240320220016443

其中 PGID 是进程组 ID,一个任务会对应一个进程组,一个任务可能需要几个进程共同来完成。多个任务(进程组),在同一个 session 内启动的,sid 是一样的,该 sid 其实就是操作系统为该会话所创建的 bashpid

image-20240320222509999

我们在 Xshell 上关闭连接(退出登录)后,操作系统并没有把之前登录创建的 session 全部清理掉,没有把该 session 下的后台进程全部终止掉,但是在其他一些操作系统上,例如 Windows ,它的注销功能,就是把当前 session 中的全部进程全部终止。为了避免出现用户退出后,进程被终止,这里引出守护进程的概念,所谓守护进程,就是该进程自成进程组,自成会话

三、setsid——将当前进程设置为守护进程

#include <unistd.h>pid_t setsid(void);
  • 返回值:成功,返回一个新的 sid,一般都是当前进程的 pid。失败,-1被返回,错误码被设置。
  • 注意:调用该函数的进程不能是某个进程组的组长。而我们一般直接在命令行 ./ 执行的某个可执行文件,都是自成进程组的,自己就是进程组的组长,所以要向实现守护进程,非常重要的一步就是 fork 创建子进程,然后让父进程退出,此时子进程的组 ID 就是父进程的 PID,而不是自己的 PID,此时就可以在子进程中调用 setsid 函数。守护进程的本质也是孤儿进程,它会被操作系统领养,但是它为自己创建了一个新的会话(session),此时就不受任何用户登录和注销的影响。

守护进程的过程分为以下四步

  • 忽略其他异常信号

  • 创建子进程,终止父进程,让子进程成为一个独立的会话

  • 更改当前的工作目录

  • 将标准输入、标准输出、标准错误重定向到 /dev/null (相当于一个垃圾箱,输入进程的东西都被丢弃了,并且从里面获取不到任何输入)

// Daemon.hpp
#include <iostream>
#include <signal.h>
#include <unistd.h>
#include <string>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>const std::string nullfile = "/dev/null";void Daemon(const std::string &cwd = "")
{// 1. 忽略其他异常信号signal(SIGCHLD, SIG_IGN); // 17号信号——子进程退出给父进程发送这个信号signal(SIGPIPE, SIG_IGN); // 读端关闭写端正常,操作系统会给写端发送13号信号,终止掉写端signal(SIGSTOP, SIG_IGN); // 暂停信号// 2. 创建子进程,将父进程终止,让子进程变成独立的会话if (fork() > 0)exit(0);setsid();// 3. 更改当前的工作目录if (!cwd.empty())chdir(cwd.c_str());// 4. 将标准输入,标准输出,标准错误重定向至 /dev/null(这就相当于一个垃圾箱,输入进去的内容都会被丢弃)int fd = open(nullfile.c_str(), O_RDWR);if(fd > 0){dup2(fd, 0);dup2(fd, 1);dup2(fd, 2);close(fd);}
}

image-20240321101120175

image-20240321102157430

image-20240321103447116

小Tips:一般守护进程的名字都以 d 结尾。

四、daemon——设置为守护进程

daemon 函数是系统为我们提供的将一个进程设置成守护进程的函数。

#include <unistd.h>int daemon(int nochdir, int noclose);

nochdir 为 0 表示将进程的工作目录设置到 / 目录。noclose 表示将标准输入、标准输出、标准错误重定向到 /dev/null 中。

五、结语

今天的分享到这里就结束啦!如果觉得文章还不错的话,可以三连支持一下,春人的主页还有很多有趣的文章,欢迎小伙伴们前去点评,您的支持就是春人前进的动力!

在这里插入图片描述

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

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

相关文章

国产工业级实时数据库

项目功能描述 Mars数据库的核心功能在于其能够高效地处理来自工业现场的大量传感器数据。它通过简化的可视化配置&#xff0c;允许用户轻松接入各种传感器&#xff0c;并进行数据记录和逻辑处理。Mars数据库在单机模式下支持高达120万个传感器信号的接入&#xff0c;而其分布式…

Python Excel 指定内容修改

需求描述 在处理Excel 自动化时,财务部门经常有一个繁琐的场景,需要读取分发的Excel文件内容复制到汇总Excel文件对应的单元格内,如下图所示: 这种需求可以延申为,财务同事制作一个模板,将模板发送给各员工,财务同事需收取邮件将员工填写的excel文件下载到本机,再类似…

Java Web学习笔记15——DOM对象

DOM&#xff1a; 概念&#xff1a;Document Object Model&#xff1a; 文档对象模型 将标记语言的各个组成部分封装为对应的对象&#xff1a; Document: 整个文档对象 Element&#xff1a;元素对象 Attribute&#xff1a; 属性对象 Text&#xff1a;文本对象 Comment&a…

【Linux取经路】信号的发送与保存

文章目录 一、重新理解发送信号二、信号的保存、阻塞信号的概念三、信号集操作函数3.1 sigprocmask3.2 sigpending 四、阻塞信号代码验证五、结语 一、重新理解发送信号 进程通过位图来实现对普通信号&#xff08;1-31号信号&#xff09;的保存&#xff0c;该位图保存在进程的…

冯喜运:6.7今日黄金原油行情分析及独家操作策略

【黄金消息面分析】&#xff1a;周三&#xff08;6月5日&#xff09;&#xff0c;金价回升逾1.2%&#xff0c;收盘报每盎司2,355.49美元&#xff0c;全面收复前一交易日的跌幅。周三当天前公布的美国民间就业数据弱于预期&#xff0c;增强了美联储将在今年晚些时候降息的预期&a…

多表连接查询和子查询

一、连接查询 连接查询是SQL语言最强大的功能之一&#xff0c;它可以执行查询时动态的将表连接起来&#xff0c;然后从中查询数据。 1.1、连接两表的方法 在SQL中连接两表可以有两种方法&#xff0c;一种是无连接规则连接&#xff0c;另一种是有连接规则连接。 无连接规则连…

PbootCms微信小程序官网模版/企业官网/社交电商官网/网络工作室/软件公司官网

在数字化时代&#xff0c;企业网站已成为吸引潜在客户、提升企业形象、和扩大品牌影响力的必备工具。因此&#xff0c;一个优秀的企业网站模板显得尤为重要。 企业官网的内容框架通常都包含企业形象、产品或服务类型、信息展示等部分&#xff0c;设计师需要借助和企业形象契合…

初学者如何对大模型进行微调?

粗略地说&#xff0c;大模型训练有四个主要阶段&#xff1a;预训练、有监督微调、奖励建模、强化学习。 预训练消耗的时间占据了整个训练pipeline的99%&#xff0c;其他三个阶段是微调阶段&#xff0c;更多地遵循少量 GPU 和数小时或数天的路线。预训练对于算力和数据的要求非…

【vue3|第6期】如何正确地更新和替换响应式对象reactive

日期&#xff1a;2024年6月5日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对的地方&#xff…

区间预测 | Matlab实现QRCNN-GRU-Attention分位数回归卷积门控循环单元注意力机制时序区间预测

区间预测 | Matlab实现QRCNN-GRU-Attention分位数回归卷积门控循环单元注意力机制时序区间预测 目录 区间预测 | Matlab实现QRCNN-GRU-Attention分位数回归卷积门控循环单元注意力机制时序区间预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现QRCNN-GRU-…

eNSP学习——配置RIP的版本兼容、定时器和协议优先级

目录 主要命令 原理概述 实验内容 实验拓扑 实验目的 实验编址 实验步骤 1、基本配置 2、配置RIP协议的版本兼容 3、配置RIP的定时器 4&#xff0e;配置RIP协议优先级 需要eNSP各种配置命令的点击链接自取&#xff1a;华为&#xff45;NSP各种设备配置命令大全PDF版…

二重,三重积分和曲面,曲线积分的关系和区别

这是我在学习完曲面曲线积分概念后容易和二重三重积分混淆而大概总结和区分了一下&#xff0c;如果有错误请大佬指出&#xff0c;多谢&#xff01;&#xff01;&#xff01;

CopilotKit:开源 Copilot 框架,部署应用内 AI 代理,使用 Langchain 自动执行任何任务!

原文链接&#xff1a;&#xff08;更好排版、视频播放、社群交流、最新AI开源项目、AI工具分享都在这个公众号&#xff01;&#xff09; CopilotKit&#xff1a;开源 Copilot 框架&#xff0c;部署应用内 AI 代理&#xff0c;使用 Langchain 自动执行任何任务&#xff01; &am…

WPS表格插件方方格子【凑数】功能:选出和等于固定数字的数

文章目录 后来发现可以下载方方格子插件&#xff0c;使用【凑数】功能https://ffcell.lanzouj.com/iwhfc1kjhayh【凑数】快速【凑数】 导师让沾发票&#xff0c;需要选出若干个数额的发票&#xff0c;使它们的和等于一个指定数。不知道怎么办了&#xff0c;查了一下&#xff0c…

SOA的发展历史

1.SOA的发展历程 回顾SOA发展历程&#xff0c;我们把其大致分为了三个阶段&#xff0c;下面将分别介绍每个阶段的重要标准和规范。 1.1.萌芽阶段 这一阶段以XML技术为标志&#xff0c;时间大致从20世纪90年代末到21世纪初。XML系W3C所建&#xff0c;源自流行的标准通用标记语…

Xcode 打包报错Command PhaseScriptExecution failed with a nonzero exit code

解决办法: 1、在Xcode项目中 Pods -> Targets Support Files -> Pods-项目名 -> Pods-项目名-frameworks 中(大约在第44行) 加上 -f 2、CocoaPods版本太旧了,可以尝试升级CocoaPods版本 使用sudo gem update cocoapods更新cocoapods&#xff0c;问题将在1.12.1版本已…

shell的编程方式

文章目录 变量俩种方式第一种方式第二种方式 取消变量数组创建数组获取数组元素的方式 read输出的方式限制输入的方式 流程控制方式for循环输出的方式第一种方式第二种方式while循环输出的方式select选择输出的方式 判断方式判断的四种方式第一种方式第二种方式第三种方式 算术…

Docker笔记-解决非交互式运行python时print不输出的问题

换句话来说就是在docker中如何不会python的print 只需要在启动时&#xff0c;不让python缓冲其输出。 关键命令如下&#xff1a;PYTHONUNBUFFERED1 如下&#xff1a; docker run -e PYTHONUNBUFFERED1 <your_image> 下面解释下-e "-e"选项的全称是"…

【软件项目管理篇】怎样平衡软件质量与时间成本范围的关系?

你会发现&#xff0c;在实际的软件项目中不乏这样的例子&#xff1a; 一个项目&#xff0c;正常估算&#xff0c;要三个月才能完成&#xff0c;但是老板或客户要压缩到一个月完成&#xff0c;而你不知道如何说服他们&#xff1b;项目开发一半&#xff0c;产品经理告诉你&#…

Python-GEE遥感云大数据分析、管理与可视化及多领域案例教程

原文链接&#xff1a;Python-GEE遥感云大数据分析、管理与可视化及多领域案例教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247606139&idx3&sn2b98c8d5c99878ce78c8fade559bdae5&chksmfa821e9ccdf5978a7e63a1d514f2a643158a595fa75ac751c5ca47769…