11 - 守护进程深度分析

news2024/11/26 8:27:03

---- 整理自狄泰软件唐佐林老师课程

查看所有文章链接:(更新中)Linux系统编程训练营 - 目录

文章目录

  • 1. 会话与终端的关联
    • 1.1 思考
    • 1.2 新会话关联控制终端的方法
    • 1.3 一些相关推论
    • 1.4 一些想法
    • 1.5 编程实验:会话与终端
  • 2. 守护进程要点分析
    • 2.1 什么是守护进程(Daemon)
    • 2.2 守护进程的创建步骤
    • 2.3 守护进程的创建步骤流程图
    • 2.4 守护进程关键点分析
    • 2.5 编程实验:创建守护进程

1. 会话与终端的关联

1.1 思考

  • 代码中创建的会话,如何关联 控制终端?

1.2 新会话关联控制终端的方法

会话首进程成功打开终端设备(设备打开前处于空闲状态)

  1. 关闭标准输入输出和标准错误输出
  2. 将stdin关联到终端设备:STDIN_FILENO ==> 0
  3. 将stdout关联到终端设备:STDOUT_FILENO ==> 1
  4. 将stderr关联到终端设备:STDERR_FILENO ==> 2

1.3 一些相关推论

  • 新会话 关联 控制终端 后,会话中的 所有进程 生命期控制终端 相关
  • 只有 会话首进程 能够关联控制终端(会话中的其它进程不行)
  • 进程的标准输入输出与标准错误输出可以进行 重定向
    • 由描述符 0, 1, 2 决定重定向的目标位置(按顺序打开设备)
    • 控制终端与进程的标准输入输出以及标准错误输出无直接关系

1.4 一些想法

在这里插入图片描述
在这里插入图片描述

1.5 编程实验:会话与终端

【参看链接】:11 - 守护进程深度分析 / 00会话与终端

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 守护进程要点分析

2.1 什么是守护进程(Daemon)

  • 守护进程是系统中执行任务的 后台进程
    • 不与任何终端相关联(不接收终端相关的信号)
    • 生命周期长,一旦启动,正常情况下不会终止(直到系统退出)
    • Linux大多数 服务器 使用守护进程实现(守护进程名以 后缀d 结尾)

2.2 守护进程的创建步骤

  1. 通过 fork() 创建新进程,成功后,父进程退出
  2. 子进程通过 setsid() 创建新会话
  3. 子进程通过 fork() 创建孙进程(肯定不是会话首进程)
  4. 孙进程修改模式 umask(),改变工作目录为 “/”
  5. 关闭标准输入输出和标准错误输出
  6. 重定向标准输入输出和标准错误输出(“/dev/null”)

2.3 守护进程的创建步骤流程图

在这里插入图片描述

2.4 守护进程关键点分析

  • 父进程创建子进程是为了创建新会话
  • 子进程创建孙进程是为了 避免产生 控制进程
  • 孙进程不是会话首进程,因此不能关联终端
  • 重定向操作可以避开奇怪的进程输出行为

2.5 编程实验:创建守护进程

【参看链接】:11 - 守护进程深度分析 / 01守护进程 / first-d.c
在这里插入图片描述
在这里插入图片描述

  没有孙进程中的打印信息不太合理,因为在一些情况下,我们还是需要查看守护进程的一些打印数据。我们可以将原本重定向到“/dev/null”的输出,重新重定向到其它文件:

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

SpringSecurity自定义认证

一. 前言 ​ 学习了SpringSecurity的使用,以及跟着源码分析了一遍认证流程,掌握了这个登录认证流程,才能更方便我们做自定义操作。 ​ 下面我们来学习下怎么实现多种登录方式,比如新增加一种邮箱验证码登录的形式,但…

chatgpt赋能python:用Python建立Pipeline-优化你的数据处理流程

用Python建立Pipeline - 优化你的数据处理流程 如果你是一位数据科学家或是数据工程师,那么你一定知道数据处理流程的重要性。数据流程不只是数据的处理和清洗,还包括数据来源的获取以及对数据进行可视化、建模和验证。这个流程可以十分复杂&#xff0c…

solr快速上手:实现从mysql定时自动同步数据(六)

0. 引言 上一章节我们讲解了从msyql同步数据到solr,但是我们每次同步都需要在solr-admin中点击同步按钮,这在生产环境中肯定是不可行的,那么solr是否支持自动化同步了,答案当然是可以,我们今天继续来探索如何实现solr…

虚拟机安装和配置红帽企业版 7.4 操作系统及相关设置

虚拟机安装和配置红帽企业版 7.4 操作系统及相关设置 当安装红帽企业版 7.4 操作系统时,可以按照以下步骤进行配置和设置: 使用 VM16.0 安装软件,打开虚拟机管理程序,并选择创建新的虚拟机。在创建虚拟机的过程中,选…

ChatGPT在线网页版和接口

chat gpt能写公众号文章吗 ChatGPT是一种强大的自然语言生成技术,它可以用来自动生成大量的、质量较高的文本。根据OpenAI官方的演示和使用案例,ChatGPT已经被用于文本摘要、对话生成、语言翻译、文本分类等多种应用场景。 然而,ChatGPT作为…

文本三剑客之 awk

awk Linux/UNIX 系统中,awk 是一个功能强大的编辑工具。逐行读取输入文本 以空格作为分割符,多个空格他会自动压缩成一个空格 AWK信息的读入也是逐行指定的匹配模式进行查找,对符合条件的内容进行格式化输出或者过滤处理. 1按照命令找指定…

用户档案PDF报表

用户档案PDF报表 理解数据填充的两种方式熟练构造分组报表 熟练构造Chart图形报表实现个人档案的PDF输出 数据填充 我们介绍了如何使用JasperReport来生成简单的文本报表,正式企业开发中动态数据展示也是报表中最重要的一 环,接下来我们共同研究的就是填…

FastCorrect:语音识别快速纠错模型丨RTC Dev Meetup

前言 「语音处理」是实时互动领域中非常重要的一个场景,在声网发起的「RTC Dev Meetup丨语音处理在实时互动领域的技术实践和应用」活动中,来自百度、寰宇科技和依图的技术专家,围绕该话题进行了相关分享。 本文基于微软亚洲研究院主管研究…

chatgpt赋能python:Python应用图标的SEO优化策略

Python应用图标的SEO优化策略 作为一门跨平台解释型编程语言,Python已经成为越来越多企业和开发者的首选语言之一。在Python应用的推广过程中,图标的设计和SEO优化也变得越来越重要。在本文中,我们将探讨Python应用图标的SEO优化策略&#x…

CCE集群切换OBS共享存储方案

目录 一、背景 二、创建PVC 三、同步nfs数据到OBS 四、变更无状态负载数据储存为OBS 五、卸载弹性文件服务SFS(nfs) 一、背景 生产环境CEE集群,每个K8s节点挂载同一个华为云弹性文件服务SFS(可以简单的理解为nfs)。无状态应用通过hostPath…

chatgpt赋能python:Python就业岗位:行业热门,前景广阔

Python 就业岗位:行业热门,前景广阔 作为其中一门最受欢迎的编程语言,Python 经常出现在各个行业的招聘需求中。无论是大企业、初创公司,还是政府机构和非营利组织,都需要 Python 专业人士来应对日益增长的数据和技术…

chatgpt赋能python:Python库使用指南

Python库使用指南 Python是一种高级编程语言,拥有丰富而强大的标准库和第三方库。在本文中,将介绍一些主要Python库的使用方法以及如何通过使用它们来提高SEO。 Requests库 Requests是一个流行的第三方库,用于HTTP请求和响应。可以使用它来…

【内网安全-隧道搭建】内网穿透_Spp上线(全双工通信)

目录 Spp(特殊协议上线) 1、简述: 2、用法: 1、准备 2、服务器 3、客户机 4、cs、msf Spp(特殊协议上线) 1、简述: 1)支持的协议:tcp、udp、rudp(可靠…

基于动力学模型的无人驾驶车辆MPC轨迹跟踪算法及carsim+matlab联合仿真学习笔记

目录 1 模型推导及算法分析 1.1 模型推导 1.1.1 车辆动力学模型 1.1.2 线性时变预测模型推导 1.2 模型预测控制器设计 1.2.1 目标函数设计 1.2.2 约束设计 2 代码解析 2.1 模板框架 2.1.1 S-Function 2.1.2 mdlInitializeSizes函数 2.1.3 mdlUpdates()函数 2.1.4 …

机器学习中的数学原理——分类的正则化

通过这篇博客,你将清晰的明白什么是分类的正则化。这个专栏名为白话机器学习中数学学习笔记,主要是用来分享一下我在 机器学习中的学习笔记及一些感悟,也希望对你的学习有帮助哦!感兴趣的小伙伴欢迎私信或者评论区留言&#xff01…

Go异步任务解决方案 Asynq

今天为大家介绍一个Go处理异步任务的解决方案:Asynq,是一个 Go 库,用于排队任务并与 worker 异步处理它们。它由Redis提供支持,旨在实现可扩展且易于上手。 一、概述 Asynq 是一个 Go 库,用于对任务进行排队并与工作人…

Python爬虫学习-简单爬取网页数据

疫情宅家无事,就随便写一些随笔吧QwQ… 这是一篇介绍如何用Python实现简单爬取网页数据并导入MySQL中的数据库的文章。主要用到BeautifulSoup requests 和 pymysql。 以网页https://jbk.39.net/mxyy/jbzs/为例,假设我们要爬取的部分数据如下图所示&#…

【板栗糖GIS】——如何下载哔哩哔哩的视频CC字幕为不带时间节点的纯文字

【板栗糖GIS】——如何下载哔哩哔哩的视频CC字幕为不带时间节点的纯文字 目录 1. 打开edge浏览器或谷歌浏览器 2. 安装油猴插件 3. 安装字幕插件 4. 打开哔哩哔哩视频播放页面,点击字幕 首先在想要下载之前需要先判定视频是否有云字幕,如果有才可以…

xxl-job详解

什么是xxl-job? ​ xxl-job是一个分布式的任务调度平台,其核心设计目标是:学习简单、开发迅速、轻量级、易扩展,现在已经开放源代码并接入多家公司的线上产品线,开箱即用。xxl是xxl-job的开发者大众点评的许雪里名称的…

SpringBoot+vue 实现监控视频rtsp播放(java+Nginx+ffmpeg+flv.js)

其实原理就是: 将监控通过FFMPEG,推送给Nginx,前端通过Nginx地址拉取视频,就可以播放了。 1:安装FFMPEG. 2:下载并且配置nginx. 3:使用java代码实现调用cmd或者linux窗口,并且运行操作FFMPEG的命令,进行监控视频rtsp格式的推送,推送给nginx. …