守护进程深度分析
思考
代码中创建的会话,如何关联控制终端?
新会话关联控制终端的方法
会话首进程成功打开终端设备 (设备打开前处于空闲状态)
- 1、关闭标准输入输出和标准错误输出
- 2、将 stdin 关联到终端设备:STDIN_FILENO => 0
- 3、将 stdout 关联到终端设备:STDOUT_FILENO => 0
- 4、将 stderr 关联到终端设备:STDERR_FILENO => 0
一些相关推论
新会话关联控制终端后,会话中所有进程生命期与控制终端相关
只有会话首进程能够关联控制终端 (会话中的其他进程不行)
进程的标准输入输出与标准错误输出可以进程重定向
- 由描述符 0,1,2 决定重定向的目标位置 (按顺序打开设备)
- 控制终端与进程的标准输入输出以及标准错误输出无直接关系
一个大胆的想法

代码示例

会话与终端深度实验
什么是守护进程 (Daemon) ?
守护进程是系统中执行任务的后台进程
- 不与任何终端相关联 (不接收终端相关的信号)
- 生命周期长,一旦启动,正常情况下不会终止 (直到系统退出)
- Linux 大多服务器使用守护进程实现 (守护进程名以后缀 d 结尾)
守护进程的创建步骤
1、通过 fork() 创建新进程,成功后,父进程退出
2、子进程通过 setsid() 创建新会话
3、子进程通过 fork() 创建孙进程 (肯定不是会话首进程)
4、孙进程修改模式 umask(),改变工作目录为 "/"
5、关闭标准输入输出和标准错误输出
6、重定向标准输入输出和标准错误输出 ("/dev/null")

守护进程关键点分析
父进程创建子进程是为了创建新会话
子进程创建孙进程是为了避免产生控制进程
孙进程不是会话首进程,所以不能关联终端
重定向操作可以避开奇怪的进程输出行为
创建守护进程
相关文章:
守护进程深度分析
思考 代码中创建的会话,如何关联控制终端? 新会话关联控制终端的方法 会话首进程成功打开终端设备 (设备打开前处于空闲状态) 1、关闭标准输入输出和标准错误输出2、将 stdin 关联到终端设备:STDIN_FILENO > 03、将 stdout 关联到终端设…...
SpringAMQP
SpringAMQT RabbitMQ安装与部署RabbitMQ结构简单队列模型 SpringAMQP依赖引入配置RabbitMQ连接信息基本模型简单队列模型WorkQueue模型 发布订阅模型FanoutExchangeDirectExchangeTopicExchange 消息转换器 消息队列是实现异步通讯的一种方式,我们将从RabbitMQ为例开…...
深入探索Sharding JDBC:分库分表的利器
随着互联网应用的不断发展和用户量的不断增加,传统的数据库在应对高并发和大数据量的场景下面临着巨大的挑战。为了解决这一问题,分库分表成为了一个非常流行的方案。分库分表主流的技术包括MyCat和Sharding JDBC。我们来通过一张图来了解这两者有什么区…...
Java后端模拟面试 题集④
1.你先作个自我介绍吧 面试官您好,我叫张睿超,来自湖南长沙,大学毕业于湖南农业大学,是一名智能科学与技术专业的统招一本本科生。今天主要过来面试贵公司的Java后端开发工程师岗位。 大学里面主修的课程是Java、Python、数字图…...
中国5G产业全景图谱报告2022_挚物AIoT产业研究院
中国5G产业全景图谱报告2022_挚物AIoT产业研究院 产业结构 5G 产业结构主要包括接入网、传输网、核心网、电信运营商、网络配套服务商、5G 应用生态及产业服务 7 个主要板块。根据各版块中主要市场参与者提供的产品和服务,又下分子版块。 (1ÿ…...
设计链表复习
设计链表 class ListNode {int val;ListNode next;public ListNode() {}public ListNode(int val) {this.val val;}public ListNode(int val, ListNode next) {this.val val;this.next next;}}class MyLinkedList {//size存储链表元素的个数int size;//虚拟头节点ListNode…...
在 Visual Studio Code (VS Code) 中设置
在 Visual Studio Code (VS Code) 中设置代理服务器的详细教程如下: 打开 Visual Studio Code。 在顶部菜单栏中,点击 "File"(文件) > "Preferences"(首选项) > "Settings…...
2023年拼多多双11百亿补贴新增单件立减玩法介绍
2023年拼多多双11百亿补贴新增单件立减玩法介绍 拼多多启动了11.11大促活动,主题为“天天11.11,天天真低价”。消费者享受多重优惠,包括满减、百亿补贴和单件立减等。百亿补贴新增玩法,有超过20000款品牌商品参与单件立减活动。 …...
面试题 01.06. 字符串压缩
题目来源: leetcode题目,网址:面试题 01.06. 字符串压缩 - 力扣(LeetCode) 解题思路: 计算压缩后的字符串长度,如果该长度小于原字符串长度,返回压缩后的字符串,否则…...
那些你面试必须知道的webpack知识点
目录 1、webpack介绍和简单使用1.1 什么是webpack?1.2 安装webpack1.3 简单使用一下webpack 2、webpack的入口与输出2.1 入口(entry)2.2 输出(output) 3、入口多种配置方法3.1 多文件打包成一个文件3.2 多文件打包成多文件 4、loader的概念5、压缩打包HTML5.1 使用步…...
十四、队列函数
1、概述 (1)使用队列的流程:创建队列、写队列、读队列、删除队列。 2、创建 队列的创建有两种方法:动态分配内存、静态分配内存。 2.1、动态分配内存 (1)函数:xQueueCreate,队列的内存再函数内部动态分配。 (2)函数原型如下&…...
使用高防服务器有什么好处?103.216.155.x
为什么建议租用高防服务器 第一,高防服务器由于业务的特殊性,本身机器的配置要求高,服务器的价格相比普通的贵,而且,机器还有维护费、托管费等,这会让运营的成本上升。 第二,租用高防服务器&a…...
Android笔记(七)Android JetPack Compose组件搭建Scaffold脚手架
在去年2022年曾发布一篇关于脚手架的文章:“Android JetPack Compose组件中Scaffold的应用” 。但是Android的版本从12变更到13及以上版本,导致一些细节的实现存在不同。在本文中,将从头开始介绍整个脚手架的搭建过程。 一、新建项目模块 在…...
Git合并某个分支上的某个提交
1. 首先,确保你当前所在的分支是你要合并分支的父分支。你可以使用以下命令切换到父分支: git checkout <父分支名称> 2. 确保你要合并的分支是可用的。你可以使用以下命令查看所有可用的分支: git branch -a 这将显示所有本地和远程…...
在pytorch中对于张量维度的理解
原文参考链接: https://blog.csdn.net/qq_36930921/article/details/121670945. https://zhuanlan.zhihu.com/p/356951418 张量的计算:https://zhuanlan.zhihu.com/p/140260245 学习过程中对知识的补充学习,谨防原文失效,请大家支…...
JAVA高级教程Java HashMap表达式(7)
目录 7、HashMap的使用students类 7、HashMap的使用 students类 package Map01;import java.util.Objects ;public class Students implements Comparable<Students>{private String name;private int stuNO;public Students() {}public Students(String age, int stuN…...
【iOS】JSON解析
JSON在Web开发和网络通信和传输中广泛应用,常用于存储和传输数据,这些数据一般也都是JSON格式,可以说绝大多数网络请求传输的数据都是JSON格式 在之前有关网络请求文章中,实现了网络数据加载流程,并对加载下来的JSON数…...
华为OD 最大差(100分)【java】A卷+B卷
华为OD统一考试A卷+B卷 新题库说明 你收到的链接上面会标注A卷还是B卷。目前大部分收到的都是B卷。 B卷对应20022部分考题以及新出的题目,A卷对应的是新出的题目。 我将持续更新最新题目 获取更多免费题目可前往夸克网盘下载,请点击以下链接进入: 我用夸克网盘分享了「华为O…...
打印新闻标题,使用封装get、set方法,打印前15个字符串
package day21; import java.util.ArrayList; import java.util.Collections;/*** author monian* Wo yi wu ta,wei shou shu er!*/ public class Homework01 {SuppressWarnings({"all"})public static void main(String[] args) {News news1 new News("新冠确…...
FL Studio21中文版本好用吗?值不值得下载
今天,我从一个FL Studio忠实且还算资深的用户角度,来为大家深度介绍并评测一下FL Studio的性能以及我四年的使用感受。 FL Studio是一款集剪辑、编曲、录音、混音一体的全能DAW(数字音频工作站)。其所有界面都是支持100%矢量化的…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...
用 Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章
用 Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章 摘要: 操作系统内核的安全性、稳定性至关重要。传统 Linux 内核模块开发长期依赖于 C 语言,受限于 C 语言本身的内存安全和并发安全问题,开发复杂模块极易引入难以…...
stm32进入Infinite_Loop原因(因为有系统中断函数未自定义实现)
这是系统中断服务程序的默认处理汇编函数,如果我们没有定义实现某个中断函数,那么当stm32产生了该中断时,就会默认跑这里来了,所以我们打开了什么中断,一定要记得实现对应的系统中断函数,否则会进来一直循环…...
第14节 Node.js 全局对象
JavaScript 中有一个特殊的对象,称为全局对象(Global Object),它及其所有属性都可以在程序的任何地方访问,即全局变量。 在浏览器 JavaScript 中,通常 window 是全局对象, 而 Node.js 中的全局…...
SDU棋界精灵——硬件程序ESP32实现opus编码
一、 音频处理框架 该项目基于Espressif的音频处理框架构建,核心组件包括 ESP-ADF 和 ESP-SR,以下是完整的音频处理框架实现细节: 1.核心组件 (1) 音频前端处理 (AFE - Audio Front-End) main/components/audio_pipeline/afe_processor.c功能: 声学回声…...
