C/C++轻量级并发TCP服务器框架Zinx-游戏服务器开发005:守护进程与进程监控

文章目录

  • 1 守护进程
    • 1.1 进程组和会话
    • 1.2 会话的相关概念
    • 1.3 守护进程的概念
    • 1.4 守护线程的特点
    • 1.5 守护进程创建的基本步骤
    • 1.6 本项目守护进程的实现
  • 2 进程监控
    • 2.1 进程监控的实现

1 守护进程

1.1 进程组和会话

进程除了有进程的PID之外还有一个进程组,进程组是由一个进程或者多个进程组成。通常他们与同一作业相关联可以收到同一终端的信号。

每个进程组有唯一的进程组ID,每个进程组有一个进程组组长。如何判断一个进程是不是这个进程组的组长了,通常进程组ID等于进程ID那么这个进程就是对应进程组的组长。

1.2 会话的相关概念

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

一个会话可以有一个终端,建立与控制终端连接的会话首进程被成为控制进程,一个会话的几个进程组可以分为前台进程后台进程,而这些进程组的控制终端相同也就是sesion id是一样的当用户使用ctr +c 产生SIGINT信号时内核会发送信号给相应前台进程组的所有进程

如果我运行一个程序我们想要把他放到后台运行我们可以在可执行程序的后面加一个&
举个例子:./test &
如果我们想要把他提到前台进程我们可以使用fg.

1.3 守护进程的概念

守护进程也叫做精灵进程,是运行在后台的一种特殊进程他独立于控制终端并且可以周期性的执行某种任务或者等待处理某些发生的事件。

守护进程是非常有用的进程,在Linux当中大多数服务器用的就是守护进程,比如Web服务器、http等,同时守护进程完成很多系统的任务。

当Linux系统启动的时候,会启动很多系统服务,这些进程服务是没有终端的。也就是说你把终端关闭了这些系统服务是不会停止,他们一直运行着他们有一个名字就叫做守护进程

我们可以使用ps ajx来查看系统中的进程

  • 参数说明:
a代表不仅列出当前用户的进程并且其他用户的进程也会被列出
x表示不仅列出所有控制终端的进程也列出所有无控制终端的进程
j表示列出也作业控制相关的进程

下面我们使用ps axj来查看系统中的守护进程:

其中TTY为?号的都表示这个进程和终端没有关系。

在这里插入图片描述

1.4 守护线程的特点

守护进程是一种长期运行的进程,这种进程在后台运行并且不根任何控制终端关联其主要特点如下:

生存周期长[不是必须]:一般是操作系统启动的时候他启动,操作系统关闭的时候他也关闭.守护进程和终端没有关联,也就是说他们没有控制终端,所以你控制终端退出也不会导致守护进程退出.守护进程是在后台运行不会占着终端,终端可以执行其它命令.

1.5 守护进程创建的基本步骤

  1. 设置权限掩码,调用umask(0)权限掩码不会对文件的权限有太多的影响。

  2. 父进程创建子进程,fork一个子进程(脱离终端)出来。然后父进程退出(把终端空出来不让中端卡住):固定套路。

    • 其中fork()的目的是想调用setsid()来建立新会话。目的是子进程有单独的sid,而且子进程也成为了一个新进程组的组长,同时子进程不关联任何终端。
    • 注意:调用setsid建立新会话的进程不能是进程组的组长。
  3. 由于守护进程和终端没有关系,所以我们需要将子进程的标准输入和标准输出重定向到dev/null(空设备当中去)。

    • 我们可以使用open函数打开这个空设备文件将子进程的标准输入和标准输出重定向到这个空设备对应的文件当中。
    • 黑洞确保守护进程不从键盘接收任何东西也把任何东西打印到屏幕上。

1.6 本项目守护进程的实现

  1. 判断启动参数,若为daemon则按照守护进程启动
  2. 启动守护进程时,创建子进程用于游戏业务;父进程用于接收子进程退出状态并重启子进程
void daemonlize()
{//1 forkint ipid = fork();if (0 > ipid){exit(-1);}if (0 < ipid){//2 父进程退出exit(0);}//3 子进程 设置回话IDsetsid();//4 子进程 设置执行路径//5 子进程 重定向3个文件描述到/dev/nullint nullfd = open("/dev/null", O_RDWR);if (nullfd >= 0){dup2(nullfd, 0);dup2(nullfd, 1);dup2(nullfd, 2);close(nullfd);}
}int main()
{daemonlize();random_name.LoadFile();return 0;
}

2 进程监控

在这里插入图片描述

2.1 进程监控的实现

//进程监控while (1){int pid = fork();if (0 > pid) // 这里是pid小于0{exit(-1);}/*父进程等子进程退出*/if (0 < pid)//pid大于0,是父进程{int iStatus = 0;wait(&iStatus);if (0 == iStatus){exit(0);}}/*子进程跳出循环执行游戏业务*/else // 否则就是子进程{break;}}

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

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

相关文章

AD9371 Crossbar

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 &#xff1a; AD9371 官方例程构建及单音信号收发 ad9371_tx_jesd -->util_ad9371_xcvr接口映射&#xff1a; AD9371 官方例程之 tx_jesd 与 xcvr接口映射 AD9371 官方例程 时钟间的关系与生成 &#xff1a; AD9371 官方…

Ubuntu18.04安装pcl-1.12.1,make时报错:/usr/bin/ld: cannot find -lvtkIOMPIImage

解决方案&#xff1a; 在vtk安装包中&#xff0c;重新打开cmake-gui&#xff0c;然后勾选上VTK_Group_MPI和VTK_Group_Imaging。 cd VTK-8.2.0 cd build cmake-gui然后重新编译生成。 make -j8 # 或者j4,量力而行。 sudo make install 就可以解决了。 然后重新回到pcl安装…

web3 从redux中拿出所有已完成订单 并渲染到对应的Table列表中

上文web3 React dapp项目通过事件从区块链中拿到 已取消 已完成 和所有的订单数据 并存入redux中 中 我们已经从 区块中拿到了自己的订单 然后 我们恢复一下上文的环境 ganache ganache -d然后 登一下 MetaMask 然后 用我们的项目 发布一下合约 truffle migrate --reset然后…

Win10 180天后怎么才能继续体验,自动保持续期,无需手动JH

环境: Win10 专业版 自制小程序 问题描述: Win10 180天后怎么才能继续体验,自动保持续期,无需手动JH 解决方案: 在执行本程序前需要以管理员身份运行!关闭杀毒软件,否则会失败,本方案只能在个人电脑测试体验, 只能用于学习测试体验 ,勿用与商业行为 1.先完全JH…

配置资源管理

Secret Secret 是用来保存密码、token、密钥等敏感数据的 k8s 资源&#xff0c;这类数据虽然也可以存放在 Pod 或者镜像中&#xff0c;但是放在 Secret 中是为了更方便的控制如何使用数据&#xff0c;并减少暴露的风险。 三种类型&#xff1a; kubernetes.io/service-accoun…

2023.10月考试战报|华为认证HCIP考试100%通过

相关文章&#xff1a; 考试战报|2023.7月-8月思科认证、华为认证-CSDN博客 2023.4月及5月最新HCIP 考试战报来袭_厦门微思网络的博客-CSDN博客 HCIP 3-4月考试战报_厦门微思网络的博客-CSDN博客 2023年HCIP/CCNP考试战报_厦门微思网络的博客-CSDN博客 2023年10月&#xff0…

卸载QQ后聊天记录怎么恢复?这3个有效方法送给大家!

近年来&#xff0c;微信崛起&#xff0c;已经逐渐占据了人们的日常生活&#xff0c;成为大家不可或缺的东西。这也导致了如今使用QQ的用户变得越来越少。如果用户使用QQ的频率比较低&#xff0c;那么他们可能会选择卸载QQ以此来节省手机空间。 一旦将QQ卸载&#xff0c;这意味…

集合贴3——智能客服系统

基础课17——智能客服系统-CSDN博客文章浏览阅读56次。近年来&#xff0c;实体客服机器人开始出现在银行办公厅、电信商务厅等场合&#xff0c;形成了网络智能客服、电话智能客服、实体客服机器人综合智能客服系统&#xff0c;这初步形成了一种新的产业形式。https://blog.csdn…

强化您的应用安全,从app加固开始

强化您的应用安全&#xff0c;从app加固开始 目录 强化您的应用安全&#xff0c;从app加固开始 摘要 引言 1. 加密和数据保护 2. 代码混淆 3. 防止反编译 4. 安全测试 5. 更新和补丁 6. 权限控制 7. 输入验证和输出过滤 8. 日志记录和监控 9. 安全设计和架构 10.…

Python 函数定义详解(More on Defining Functions)- 默认参数/位置参数/关键字参数

1.函数的定义和调用方法 1.1函数定义方法 """def 关键字用来定义一个函数。function_name 是函数名&#xff0c;应遵循命名规范。parameter1, parameter2, ... 是函数的参数列表&#xff0c;可以是任意数量和类型的参数。函数体是用缩进&#xff08;通常为4个…

Cesium 相机设置

1.setView 直接跳转到目的地 // 设置相机位置 const position Cesium.Cartesian3.fromDegrees(113, 31, 20000); // setView通过定义相机目的地&#xff08;方向&#xff09;,直接跳转到目的地 viewer.camera.setView({ destination: position, // 位置设置 orientation: { //…

基于SSM的二手车交易网站的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

代码随想录day2

目录 vscode 自定义代码模板Reference vscode 自定义代码模板 select User snippets from Settings on the bottom left corner. select a certain language for example: cpp create your own snippets 格式如下&#xff0c;防着写 第一行"cpp template",模板…

Git 入门使用 —— 建库、代码上下传、常用命令

目录 一、Git 入门 1.1 Git简介 1.2 Git安装 1.3 创建码云仓库 二、Git 使用 2.1 git初始化操作 2.2 代码上传 2.3 代码下载 2.4 代码更新 2.4.1 仓库管理者 2.4.1 仓库使用者 三、Git 常用命令 一、Git 入门 1.1 Git简介 Git是一个开源的分布式版本控制系统&am…

app自动化测试——capability 配置参数解析

一、Capability 简介 功能&#xff1a;配置 Appium 会话&#xff0c;告诉 Appium 服务器需要自动化的平台的应用程序 形式&#xff1a;键值对的集合&#xff0c;键对应设置的名称&#xff0c;值对应设置的值 主要分为三部分 公共部分 ios 部分 android 部分 二、Session Appi…

第14章,lambda表达式与流处理例题

package 例题;import java.util.List; import java.util.stream.Collectors; import java.util. stream.Stream;public class 例题19 { public static void main(String[] args){List<例题14> list 例题14.get例题14List();//获取公共类的测试数据Stream<例题14>…

Win11 Edge浏览器进入朔日考试系统(无纸化测评系统)的方法

Win11 Edge浏览器进入朔日考试系统&#xff08;无纸化测评系统&#xff09;的方法 笔记本型号&#xff1a;联想 使用浏览器&#xff1a;edge浏览器 操作系统&#xff1a;Windows11 网址&#xff1a;http://172.31.0.139/WZHEDU/ 注意:使用此方法打开edge浏览器会频繁出现弹窗&a…

派金SDK接入文档

一、接入SDK 1、将sdk文件手动导入到目标项目中&#xff0c;如下图所示&#xff1a; 2、该SDK需接入其他三方广告&#xff0c;通过pod的方式接入&#xff0c;在Profile中加入如下代码&#xff1a; pod GDTMobSDK, ~> 4.14.40pod BaiduMobAdSDK, ~> 5.313pod KSAdSDK…

猫罐头怎么选?千万别错过这5款好吃放心的猫罐头推荐!

猫罐头不仅美味可口&#xff0c;而且营养丰富&#xff0c;是专为猫咪打造的美食。那么&#xff0c;猫罐头怎么选&#xff1f;作为一位经营宠物店7年的店长&#xff0c;我对猫猫的饮食都非常重视&#xff0c;也见证了很多猫咪品尝各种猫罐头的瞬间&#xff0c;现在我对各个品牌的…

0基础学习VR全景平台篇第119篇:利用蒙版航拍补天 - PS教程

上课&#xff01;全体起立~ 大家好&#xff0c;欢迎观看蛙色官方系列全景摄影课程&#xff01; 嗨&#xff0c;大家好。欢迎收看蛙色VR系列教程之PS利用蒙版航拍补天。 我们之前已经教过大家如何进行航拍调色&#xff0c;不知道大家学的怎么样呢&#xff1f; 会不会发现&…