守护进程的编程规则

2023-11-04

要理解守护进程的编程规则必须先搞明白进程组、会话、组长进程等关系。

1.进程组

每个进程除了有一个进程ID之外,还属于一个进程组。进程组是一个或者多个进程的集合。每个进程组都有一个组长进程。组长进程的标识是,其进程ID和进程组ID相等。

2.会话

会话是一个或者多个进程组的集合。

进程可以调用setsid(void)创建一个新会话,如果调用此函数的进程不是一个进程组的组长,则此函数就会创建一个新会话,结果将发生下面三件事:

1)该进程编程新会话的首进程(会话首进程是创建该会话的进程),此时,该进程是新会话中的唯一进程。

2)该进程成为一个新进程组的组长进程,新进程组的ID是该调用进程的进程ID

3)该进程没有控制终端。如果在调用setsid之前有控制终端,这种联系也会中断。这刚好满足守护进程的规则,我们可以预想到,要编写守护进程需要调用setsid。


注意,如果该调用进程本身是进程组的组长,调用setsid返回错误。为了不保证发生这种情况,通常先fork,然后使其父进程终止,而子进程则继续。


3.守护进程的编程规则

(1)调用umask将文件模式创建屏蔽字设置为0

(2)调用fork,父进程退出,然后调用setsid()

(3)将工作目录改为根目录。从父进程继承来的当前工作目录可能在一个装配文件系统中,因为守护进程通常在系统再引导之前是一直存在的,所以如果守护进程的当前工作目录在一个装配文件系统中,那么该文件系统不能被卸载,这与装配文件系统的原意不符。

(4)关闭需要的文件描述符。这使得守护进程不再持有从其父进程继承而来的文件描述符,可以使用open_max()或者getrlimit()来判定最高文件描述符的值,并关闭所有到該值的描述符

(5)重定向标准输入、输出、错误输出

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

守护进程的编程规则 的相关文章

  • 【Linux】调试器---gdb的使用

    文章目录 一 背景知识 二 安装gdb 三 gdb的用法 使用须知 gdb的常用指令 1 进入调试 2 退出调试操作 3 显示源代码 4 设置断点breakPoint 5 查看断点信息 禁用断点 开启断点 删除断点 6 运行程序 开始调试r
  • 查看Linux内核配置文件(.config)

    config是内核配置文件 在不同场景下获得方法不一样 1 源代码 在kernel文件夹下 按快捷键 Ctrl H 显示隐藏文件 即可找到 config文件 2 当前Linux系统 当前的Linux内核的配置文件保存到了 proc conf
  • 在Linux中利用Service命令添加系统服务及开机自启动

    近期由于做嵌入式项目需要 要求将编写的程序在板载系统开机时自启动 这里做个笔记 备忘 1 概念 通过查资料发现linux启动服务是用SERVICE COMMAND 这里的command命令本身也是一个脚本 比如说 service netwo
  • linux下查看某服务端口对应的进程ID

    Linux下查看某端口号所对应的进程ID 使用lsof命令 格式为 lsof i 端口号 例如 lsof i 30000 root Web Service CAServer lsof i 30000 COMMAND PID USER FD
  • Linux操作系统之tcp并发编程

    一 tcp并发编程 运行结果 多线程运行代码 运行结果 二 发送缓冲区与接收缓冲区 运行结果 为什么会出现以上的现象呢 因为在服务端与客户端都存在发送缓冲区与接收缓冲区
  • 操作系统课程实践5_进程通信

    一 实验目的 1 初步了解Linux环境下进程创建和进程间通信的机制 2 掌握如何利用消息和共享内存进行通信的原理 3 利用POSIX API函数编写实例程序 4 实现父子进程间通过消息传递和共享内存方式进行通信 二 实验内容 编制两个程序
  • Centos7通过宝塔安装mysql

    文章目录 一 在桌面安装数据库 安装好可以修改端口号 二 开放3306端口号 打开远程访问权限 2 1开放3306端口号 2 1 为需要远程登录的用户赋予权限 三 查看密码 第一种方式控制面板查看 第二种方式修改密码 四 测试 五 修改连接
  • chroot的作用及详解

    什么是 chroot chroot 即 change root directory 更改 root 目录 在 linux 系统中 系统默认的目录结构都是以 即是以根 root 开始的 而在使用 chroot 之后 系统的目录结构将以指定的位
  • 查看Linux下rpm文件安装到哪个路径

    命令 root localhost rpm qpl xxx rpm more
  • Linux操作系统之C语言实现shell命令解释器项目

    文章目录 一 实现原理 二 具体实现过程 一 实现原理 普通命令 ls pwd cp clear 通过exec fork 内置命令 cd exit bash本身提供方法 调用自己的函数 不会产生子进程 二 具体实现过程 1 mybash项目
  • 【Linux】Ubuntu20.04版本安装谷歌中文输入法【教程】

    Linux Ubuntu20 04版本安装谷歌中文输入法 教程 文章目录 Linux Ubuntu20 04版本安装谷歌中文输入法 教程 一 下载fcitx googlepinyin 二 配置Language Support Referen
  • Linux操作系统之线程创建

    文章目录 一 了解线程 二 线程的创建 一 了解线程 什么是线程 线程是进程内部的一条执行路径或执行序列 二 线程的创建 pthread creat 创建线程 pthread exit 只退出当前线程 pthread join 等待线程结束
  • Linux的进程管理

    目录 1 概述 2 进程描述符 2 1 进程描述符的分配 2 2 进程描述符的存放 2 3 进程状态 2 4 进程上下文 2 5 进程家族树 3 进程的创建 4 进程的终结 5 线程的实现 1 概述 进程是执行期的代码 但是进程不止包括这样
  • cgroup----devices子系统

    devices子系统 使用devices 子系统可以允许或者拒绝cgroup中的进程访问设备 devices子系统有三个控制文件 devices allow devices deny devices list devices allow用于
  • Linux操作系统——磁盘管理

    目录 一 理论基础 二 增加虚拟磁盘 2 1 添加硬盘 6 2 2 分区 2 3 格式化 6 2 4 文件的挂载与卸载 2 5 挂载永久化 6 3 磁盘相关命令 6 3 1 命令fdisk l 6 3 2 命令df 6 3 3 命令lsbl
  • Linux 多线程 ( 多线程概念 )

    文章目录 Linux线程概念 什么是线程 二级页表 线程的优点 线程的缺点 线程异常 Linux线程概念 什么是线程 在一个程序里的一个执行路线叫做线程 thread 更准确的定义为 线程是一个进程内部的控制序列 一切进程至少有一个执行线程
  • centos切换到root登录

    具体操作方法 1 在centos系统桌面下通过快捷键 Ctrl Alt T 打开终端命令行模式 2 在centos终端命令行模式下输入以下命令切换到root用户登录 su root 切换到root用户 3 登录过程中如果怎么输入密码都出错
  • 32位机内存管理(下)

    既然这样 段描述符表放在那里呢 80386中引入了两个新的寄存器来管理描述符表 一个是48位的全局描述符表寄存器GDTR 一个是16位的局部描述符表寄存器LDTR 那么 为什么有两个描述符表寄存器呢 GDTR指向的描述符表为全局描述符表GD
  • 【VMware】虚拟机中Ubuntu无法连接网络的有效解决办法

    1 Ubuntu网络设置 依次单击 System Settings gt Network gt Wired gt Options 如下图所示 依次选择 General 勾选如下图所示的单选框 最后点击 Save 如下图所示 依次选择 IPv
  • Centos 8.0中安装Redis服务器

    企业级开发中 经常需要把一些中间件安装在Linux服务上 主要考虑到linux服务器的性能吧 1 官网下载Linux版安装包 Redis 楼主使用的是 6 2 1 目前最新是6 2 6 差别不大 2 使用XShell 和Xftp连接Cent

随机推荐

  • 设计模式对程序员的必要性

    其实设计模式的应用基础是面向对象的程序设计方法 没有面向对象的理论 设计模式的实现就没有了基础 可能从方法论的角度说 设计模式是一种思想和具体的程序设计语言没有必然的联系 可软件最终还是要通过代码来实现 不同的语言体现了对面向对象理论的不同
  • Mybatis读取和存储json类型的数据

    目录 一 测试使用JSONObject来获取json 二 设置 TableName的autoResultMap为true TableField的typeHandler为JacksonTypeHandler class 三 设置xml当中的r
  • 3个权威免费资源下载网站!

    hello大家好 这里是预计今天可以到家的老Y工作室 因为这几天在出差 也没花太多时间帮大家搜罗一些好玩有趣的网站 等回家后 会把补一些软件和教程 有朋友之前问老Y有没有免费的标准下载网站或者查询 于是老Y找了3个给有需要的朋友分享一下 0
  • Redis初级篇

    Redis 视频地址 https www bilibili com video BV1Rv41177Af p 38 资料地址 https pan baidu com s 1GxYRq5UkZHKhk3KB0nOioQ q7vj 概述 Red
  • Windows C++多线程:生产者消费者模型编程

    Windows C 多线程 生产者消费者模型编程 生产者消费者模型是一种常见的并发编程模型 用于解决生产者和消费者之间的数据交互问题 在这个模型中 生产者负责生成数据并将其放入共享的缓冲区 而消费者则从缓冲区中获取数据进行处理 在Windo
  • 软件项目管理

    一 填空题 1 项目是为创造独特的产品 服务或成果而进行的临时性的工作 2 PMBOK 2016 将项目管理分为五个过程组 即启动 计划 执行 控制和收尾 与十大知识领域 整合管理 范围管理 时间管理 成本管理 质量管理 人力资源管理 沟通
  • 如何申请国内博士

    博士申请过程还算平坦 在申请过程中得到了很多学长学姐的帮助 为了将这份帮助传递下去 我便将我的经历写下来 希望可以帮到一些同学 先介绍一下自己的情况 专业是计算机 研究方向是深度学习 机器视觉 硕士是一所排名较低的211 博士最终申请的学校
  • Lodash 总结

    数组 数组创建 随机创建数组 range range start 0 end step 1 let arr range 24 console log arr 0 1 2 3 23 创建相同元素数组 fill fill array value
  • 数据通信-路由基础

    1 IP路由选择原理 路由器的工作内容 路由器知道目标地址 发现到达目标地址的可能的路由 选择最佳路径 路由表 维护路由信息 转发IP数据 IP路由表 初始化情况下 路由器所知的网段 只有其直连接口所在网段 路由器自动将接口所在网段的路由写
  • 【注意】Kafka生产者异步发送消息仍有可能阻塞

    文章目录 问题描述 原因分析 解决办法 总结 问题描述 Kafka是常用的消息中间件 在Spring Boot项目中 使用KafkaTemplate作为生产者发送消息 有时 为了不影响主业务流程 会采用异步发送的方式 如下所示 Slf4j
  • GIS 图层

    GIS图层 从直观的角度看 就是按某种属性对数据分为若干文件 比如铁路L 公路 城市道路 乡村道路 分成若干层 从开发的角度 图层对应一张数据库表 这张表可能存在数据库中 也可能存在GIS相关文件中 图层包含要素 要素对应一条记录 做开发时
  • 丁奇mysql学习笔记-基础篇

    一 mysql的逻辑架构 问题解决 如果表 T 中没有字段 k 而你执行了这个语句 select from T where k 1 那肯定是会报 不存在这个列 的错误 Unknown column k in where clause 你觉得
  • 在Linux安装anaconda3和Pycharm

    第一步 在anaconda3官网下载Linux版本的anaconda3 官网 anaconda3 下载完成后打开终端terminal 进入下载文件的所在目录下 输入ls就可以看到所下载的文件了 第二步 准备安装Anaconda3 进入安装包
  • 【C语言】中,输入一个数组,用for循环实现将输入的n个数字按照从大到小的顺序输出。【通俗简单易懂】

    本篇文章中 我们将讲述在C语言中 输入一个数组 如何用for循环实现将输入的n个数字按照从大到小输出 一 定义数组并初始化 首先 我们定义一个整形的数组并将其初始化 输入n 来决定数组中整数的个数 然后用for循环来输入这个数组中的各个数字
  • mysql用存储过程通过传入的参数id更新字段数据,结果更新了表中所有该字段的数据

    近日一个业务 需要用存储过程实现 其中有一句只是简单的通过id更新字段的语句 但是调用存储过程中发现 会更新表格所有数据 如下图 图一 表中现有数据 需要更新的字段是红框里的 图二 存储过程截图如下 红框里的更新语句 调用存储过程 如图三
  • 二十. Kubernetes 存储挂载

    目录 一 存储挂载 volumes卷的分类 1 EmptyDir 示例 2 hostPath 示例 3 HostDir 示例 4 NFS 网络数据卷示例 持久化卷 二 持久化存储的 PV PVC StorageClass PV 的创建与使用
  • fswebcam一次拍摄多张图片(存在问题)

    初衷 由于树莓派上使用python v4l2capture有问题 因此想了个中间办法 使用fswebcam一次连续拍摄多张图片 fswebcam no banner d dev video0 r 1920x1080 F 15 save 1
  • 一文汇总开源大语言模型,人人都可以拥有自己的ChatGPT

    前言 OpenAI发布的ChatGPT火爆全球以来 全球互联网大厂陆续跟进 纷纷宣布了自家的Chat产品 如Google的Bard 百度的文心一言 阿里的通义千问等等 这些Chat产品背后都是依赖的大语言模型 Large Language
  • keepalive+haproxy实现高可用

    目录 一 搭建环境 1 基本环境 二 修改配置文件 1 建立haproxy配置文件 2 修改haproxy配置文件 3 修改keeplive配置文件 三 启动服务验证 1 HAproxy虚拟机启动haproxy服务和keepalived服务
  • 守护进程的编程规则

    要理解守护进程的编程规则必须先搞明白进程组 会话 组长进程等关系 1 进程组 每个进程除了有一个进程ID之外 还属于一个进程组 进程组是一个或者多个进程的集合 每个进程组都有一个组长进程 组长进程的标识是 其进程ID和进程组ID相等 2 会