【Linux笔记】——进程间关系与守护进程

article/2025/8/29 19:20:36

🔥个人主页🔥:孤寂大仙V
🌈收录专栏🌈:linux
🌹往期回顾🌹: 【计算机网络】基于TCP进行socket编程——实现客户端到服务端远程命令行操作
🔖流水不争,争的是滔滔不息


一、进程组

进程组 = 一群可以一起接收信号的进程,它是 Linux 下进程管理的一个重要组织方式,尤其在 shell 控制、守护进程、kill 信号传递中非常有用。进程组是一个或者多个进程的集合,一个进程组可以包含多个进程。
在这里插入图片描述
写用一个管道写一个sleep的兄弟进程放到设置成后台任务,查看这个进程组的信息。这三个进程就属于一个进程组PGID相同。
组长进程
在上面图片中的PGID一列,发现sleep进程组的PGID等于第一个sleep进程的PID。每一个进程组都有一个组长进程,进程组id(PGID)=组长进程的id。

进程组组长的作用:进程组组长可以创建一个进程组或者创建该进程组中的进程。
进程组的生命周期是从进程组创建开始到其中最后一个进程离开。只有一个进程组中有一个进程存在,这个进程组就存在,与进程组的组长存不存在(是否终止)没关系。

进程组和任务的概念,任务就是某种工作,需要由进程来完成,进程组和任务可以理解为一个东西。

二、会话

在这里插入图片描述
**进程组是更小的单位。多个进程组组成一个会话(session)。**会话可以看作是多个进程组的集合。
在我们登录xshell的时候,完成登录认证,系统必须为用户新建一个会话,会话内部必须默认有一个进程组,叫做bash。在一个会话内,所有进程组的会话id(SID),都是这个进程组所处的会话的会话id。

通过键盘输入的数据,必须明确设置进程或者进程组。在会话内部,进程组必须区分为,前台进程和后台进程。 所以在一次会话中,有且只有一个前台进程组,后台进程可以有多个。一次会话中,有且只有一个前台任务,后台任务可以有多个。

当我们直接启动一个任务(进程组),这时这个任务是前台进程,就无法输入其他命令或进行其他操作了。因为这样直接启动的任务是前台进程。根据上面内容一个会话中只能有一个前台进程,接收命令的bash进程现在已经成后台进程了,没办法接收命令。把任务设置为后台执行,这是就可以执行其他命令与其他操作了。

作业控制

jobs查看系统当前的后台任务
fd+任务号,把指定的任务提到前台。
ctrl+c终止前台任务。
在这里插入图片描述

ctrl+z暂停进程或者进程组,且自动切换到后台。
bg+任务号,让后台进程运行起来。

守护进程

守护进程(Daemon Process)是指在后台运行、脱离终端控制、通常在系统启动时自动加载、长期运行的服务程序。

登录创建会话,关闭终端销毁会话,比如之前我们写的网络服务器,如果关闭终端了,会话就关了,会影响到服务器的运行。我们的服务器不能收到任何用户登录或者注销的影响。守护进程就是把这个进程组放到一个独立会话中,让任务成为独立会话内部的作业。
在 Linux 中,用户登录终端时会创建一个新的会话(Session),该会话中包含一个或多个进程组(Process Group)。一旦用户注销或关闭终端,该会话就会终止,所有隶属于该会话的前台和后台作业也会被系统自动终结。
对于如网络服务器这类应长期运行、稳定提供服务的程序,不能受到终端的控制或用户登录状态的影响。因此,我们需要将其转变为一个守护进程(Daemon),使其脱离控制终端、独立运行于自己的会话中。这样,即使用户退出登录,服务器进程仍能继续运行,稳定提供服务。

手写一个守护进程的接口

#pragma once#include <iostream>
#include <string>
#include <cstdio>
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
#include <sys/stat.h>
#include <fcntl.h>
#include "Log.hpp"
#include "Common.hpp"using namespace LogModule;const std::string dev = "/dev/null";// 将服务进行守护进程化的服务
void Daemon(int nochdir, int noclose)
{// 1. 忽略IO,子进程退出等相关的信号signal(SIGPIPE, SIG_IGN);signal(SIGCHLD, SIG_IGN); // SIG_DFL// 2. 父进程直接结束if (fork() > 0)exit(0);// 3. 只能是子进程,孤儿了,父进程就是1setsid(); // 成为一个独立的会话if(nochdir == 0) // 更改进程的工作路径???为什么??chdir("/");// 4. 依旧可能显示器,键盘,stdin,stdout,stderr关联的.//  守护进程,不从键盘输入,也不需要向显示器打印//  方法1:关闭0,1,2 -- 不推荐//  方法2:打开/dev/null, 重定向标准输入,标准输出,标准错误到/dev/nullif (noclose == 0){int fd = ::open(dev.c_str(), O_RDWR);if (fd < 0){LOG(LogLevel::FATAL) << "open " << dev << " errno";exit(OPEN_ERR);}else{dup2(fd, 0);dup2(fd, 1);dup2(fd, 2);close(fd);}}
}

系统中自带的

daemon(1, 1);

把之前写的网络版本计算器,服务器端守护进程化。
在这里插入图片描述
源码


http://www.hkcw.cn/article/lDpROcZbRM.shtml

相关文章

OSI 七大层详解

一、应用层 人与电脑相互沟通的桥梁&#xff0c;该层协议定义了应用进程之间的交互规则&#xff0c;通过不同的应用层协议为不同的网络应用提供服务。 二、表示层 定义数据格式&#xff08;比如.pdf .txt&#xff09;、加密解密、压缩解压缩 三、会话层 建立、管理和终止链…

Vue的生命周期

一、生命周期是什么 生命周期&#xff08;Life Cycle&#xff09;的概念应用很广泛&#xff0c;特别是在政治、经济、环境、技术、社会等诸多领域经常出现&#xff0c;其基本涵义可以通俗地理解为“从摇篮到坟墓”&#xff08;Cradle-to-Grave&#xff09;的整个过程在Vue中实…

如何用Go创建一个 deployment 到容器拉起来的全流程

整体流程概述&#xff1a; 认证与配置&#xff1a; 连接到Kubernetes集群。创建Deployment对象&#xff1a; 构建一个appsv1.Deployment结构体&#xff0c;定义Pod的模板、副本数量、选择器等。发送创建请求&#xff1a; 使用Kubernetes Go客户端库将Deployment对象发送到API服…

echarts主题切换实现

文章目录 一、实现方式1.实现思路2.指定主题3.设置图表背景透明 二、具体实现1.监听与销毁2修改主题色细节 参考链接 一、实现方式 场景: 首先是我的项目有不同主题色&#xff0c;切换主题时候想要将echarts的图表主题色也一并更改&#xff0c;暂时只设置’light’和’dark’…

如何在 Ubuntu 24.04 服务器上安装 Apache Solr

Apache Solr 是一个免费、开源的搜索平台&#xff0c;广泛应用于实时索引。其强大的可扩展性和容错能力使其在高流量互联网场景下表现优异。 Solr 基于 Java 开发&#xff0c;提供了分布式索引、复制、负载均衡及自动故障转移和恢复等功能。 本教程将指导您如何在 Ubuntu 24.…

从零开始的云计算生活——第十四天,困难重重,安全管理。

一故事背景 在前面的基本无操作内容后&#xff0c;来到了大头内容&#xff0c;安全管理&#xff01;其中的防火墙相关的内容更是重中之重&#xff0c;要好好掌握&#xff0c;熟练运用。 二SELinux安全上下文 1SELinux 简介 a. SELinux&#xff08;Security-Enhanced Linux&…

UDP编程

udp是无连接的&#xff0c;没有listen 与 accept。 bind 服务端一定需要bind&#xff0c;告知别人自己的ip和port。 客户端可以不bind&#xff0c;在发送数据时候可以随机分配&#xff0c;客户端推荐bind&#xff08;与tcp不同&#xff0c;udp本身无连接&#xff09;。 注意&am…

【计网】分片

MF DF MAC帧 MTU 首部数据载荷 片偏移是整数

记录一个梦,借助大语言模型图片生成

梦见家门口有一条大河&#xff0c;但大河和其它景物都是灰暗没有鲜艳色彩很普通的梦中场景。大河似乎是长江的支流&#xff0c;但也可能有一个响亮的名字似乎是金沙江。 突然看到一条金红色的龙在快速游动&#xff0c;不敢相信自己的眼睛&#xff0c;因为一直不相信有这种生物…

PostgreSQL查询一个表的数据

要从一个表中检索数据就是按要求查询表的信息&#xff0c;。SQL的SELECT语句可分为&#xff1a; 1.选择列表&#xff08;选择查询返回的列&#xff09; 2.表列表操作&#xff08;从中查询出的数据&#xff0c;进一步进行加减乘除-*/、筛选等操作&#xff09; 3.可选的条件 whe…

聊聊后端面试中的MySQL高频考题

如大家所了解的&#xff0c;SQL&#xff08; Structured Query Language &#xff09;是一门在开发者中使用覆盖率超50%的数据库结构化查询语言。 不可否认&#xff0c;无论是常年与数据打交道的数据分析师和数据科学家&#xff0c;经常需要管理和维护数据库的数据库管理员&am…

R3GAN利用配置好的Pytorch训练自己的数据集

简介 简介:这篇论文挑战了"GANs难以训练"的广泛观点,通过提出一个更稳定的损失函数和现代化的网络架构,构建了一个简洁而高效的GAN基线模型R3GAN。作者证明了通过合适的理论基础和架构设计,GANs可以稳定训练并达到优异性能。 论文题目:The GAN is dead; long l…

【python深度学习】Day 39 图像数据与显存

知识点 图像数据的格式&#xff1a;灰度和彩色数据模型的定义显存占用的4种地方 模型参数梯度参数优化器参数数据批量所占显存神经元输出中间状态 batchisize和训练的关系 作业&#xff1a;今日代码较少&#xff0c;理解内容即可 一、图像数据的介绍 结构化数据&#xff08;如表…

mongodb源码分析session接受客户端find命令过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制。 现在继续研究ASIOSession和connection是怎么接受客户端命令的&#xff1f; mongo/transport/service_state_machine.cpp核心方法有&#xf…

酒店管理破局:AI 引领智能化转型

一、酒店行业现状&#xff1a;规模扩张加速与效率瓶颈并存 根据中国五矿证券《中国酒店行业格局分析》报告&#xff0c;国内酒店行业呈现头部集中化趋势。截至2024年第三季度&#xff0c;锦江酒店以13,186家门店、125.8万间客房的规模稳居行业第一[1]。华住集团则以178.68亿元…

大模型深度学习之双塔模型

前言 双塔模型&#xff08;Two-Tower Model&#xff09;是一种在推荐系统、信息检索和自然语言处理等领域广泛应用的深度学习架构。其核心思想是通过两个独立的神经网络&#xff08;用户塔和物品塔&#xff09;分别处理用户和物品的特征&#xff0c;并在共享的语义空间中通过相…

【Java Web】速通CSS

参考笔记:JavaWeb 速通CSS_java css-CSDN博客 目录 一、CSS入门 1. 基本介绍 2. 作用 二、CSS的3种引入方式 1. 行内式 1.1 示例代码 1.2 存在问题 2. 写在head标签的style子标签中 2.1 示例代码 2.2 存在问题 3.以外部文件的形式引入(开发中推荐使用)⭐⭐⭐ 3.1 说明 3…

PostgreSQL安装

我们使用开源的对象关系型数据库--PostgreSQL&#xff0c;它具有高性能、可扩展和支持复杂查询的特性&#xff0c;非常适合现在学习使用。 一.安装PostgreSQL 我用的windows&#xff0c;就在windows上安装。 1.首先访问 PostgreSQL 官方网站https://www.postgresql.org/dow…

C++:栈帧、命名空间、引用

一、前置知识 1.1、栈区&#xff08;Stack&#xff09; 1.1.1、内存分配与回收机制 分配方式​​&#xff1a;由编译器自动管理&#xff0c;通过调整栈指针&#xff08;ESP/RSP&#xff09;实现。 函数调用时&#xff0c;栈指针下移&#xff08;栈从高地址向低地址增长&…

【HarmonyOS 5】鸿蒙应用px,vp,fp概念详解

【HarmonyOS 5】鸿蒙应用px&#xff0c;vp&#xff0c;fp概念详解 一、前言 目前的鸿蒙开发者&#xff0c;大多数是从前端或者传统移动端开发方向&#xff0c;转到鸿蒙应用开发方向。 前端开发同学对于开发范式很熟悉&#xff0c;但是对于工作流程和开发方式是会有不适感&am…