【Linux网络编程】之守护进程

【Linux网络编程】之守护进程

  • 进程组
    • 进程组的概念
    • 组长进程
  • 会话
    • 会话的概念
    • 会话ID
  • 控制终端
    • 控制终端的概念
    • 控制终端的作用
    • 会话、终端、bash三者的关系
  • 前台进程与后台进程
    • 概念
    • 特点
    • 查看当前终端的后台进程
    • 前台进程与后台进程的切换

进程组

进程组的概念

当我们使用以下命令查与进程相关的属性时,会看到一个叫PGID的属性:

ps ajx

image-20250207143545861

它标识某一个进程属于哪个进程组。

进程组是一个进程或者多个进程的集合。每一个进程组有唯一的PGID,它是一个正整数,和PPIDPID一样,可以在C语言中用pid_t类型表示。

例如,在终端中执行如下命令:

sleep 1000 | sleep 2000 | sleep 3000

使用ps查看:

ps ajx | head -1 && ps ajx | grep -v 'grep' | grep sleep

img

这三个进程的PPID也就是父进程都是一样的,也就是-bash进程,所以这三个sleep进程是兄弟进程,它们同属于一个进程组。

image-20250207144949286

就算只有一个进程,它也会自成一个进程组:

image-20250207145100828

组长进程

组长进程就是进程组中的第一个创建的进程(按照时间),如果这个进程组中就只有一个进程,那么它就是进程组中的组长。

当进程组中的组长终止后,这个进程组并不会终止,要等到这个进程组中的最后一个进程终止,它才会终止。

代码验证1:使用下面代码先验证,C语言fork子进程,父进程和子进程属于一个进程组,且父进程是组长进程。

#include<stdio.h>
#include<unistd.h>
int main()
{pid_t id = fork();if(id == 0)//子进程执行{while(1){printf("i am child,my pid is %d\n",getpid());sleep(1);}}while(1);return 0;
}

运行结果:

image-20250207150717602

代码验证2:当组长进程结束,进程组并不会立即终止,而是等这个组中所有的进程终止后再终止:

#include<stdio.h>
#include<unistd.h>
int main()
{pid_t id = fork();if(id == 0)//子进程执行{while(1){printf("i am child,my pid is %d\n",getpid());sleep(1);}}return 0;
}

运行结果:

image-20250207151249008

会话

会话的概念

会话可以看作是多个进程组的集合,一个会话会有多个进程组,会话也会有唯一的会话ID。

一般来说,会话中的第一个进程组是-bash对应的进程组,会话ID等于该-bash进程组的组ID。

image-20250207153415886

通常来说,进程组可以由以下方式创建:

  1. 通过管道创建兄弟进程,这些兄弟进程是一个进程组
  2. 父进程fork子进程,父子进程是一个进程组。

会话ID

上面我们提到了会话ID,会话ID就是该会话中首进程的进程ID或者说是首进程的组ID。(就是-bash进程的进程ID,-bash进程总是会首进程,也是会首进程的组长进程)。

控制终端

控制终端的概念

在Linux/类Uinx系统中,控制终端通常与会话关联。即一个会话对应一个控制终端

当用户通过一个终端登录系统,会得到一个首进程shell进程,这个终端成为shell进程的控制终端,由于有关控制终端的信息存储在进程PCB中,后续的其它进程都是通过shell进程fork的,所以其它进程的控制终端也都是这个控制终端。

实际上控制终端是一个逻辑概念,每个控制终端都对应一个终端文件。这些文件被称为终端文件tty设备文件

Linux中,终端文件在/dev/pts路径下:

ls /dev/pts

实验验证:实验步骤如下。

  1. 终端1,循环执行以下脚本指令:

     while :;do ls -l /dev/pts;sleep 1;echo "~~~~~~~~~~~~~~~~~";done
    
  2. 不断创建新的终端,观察打印的终端文件是否增多。

  3. 关闭打开的终端,观察打印的终端文件是否减少。

实验现象如下:

屏幕录制-2025-02-07-172050

控制终端的作用

  1. 信号发送:可以通过特定的组合键向前台进程组发送信号,比如Ctrl+C发送SIGINT信号来中断当前操作,或者Ctrl+Z发送SIGTSTP暂停一个进程。

  2. 输入输出:控制终端为进程提供标准输入、输出和错误流。大多数情况下,这些流直接对应于用户的键盘输入和屏幕显示。

    • 什么意思呢,就是我们向键盘输入一个内容都会显示在控制终端上,printf等往显示器打印的函数,打印的内容也会显示到终端上。因为**当进程启动时,如果没有特别指定其他的输入输出目的地(重定向),其标准输入、输出和错误流默认就会关联到控制终端对应的设备文件上。**云服务器上文件描述符012指向的文件:

      image-20250207173240326

    • 虚拟机中(也类似):

      image-20250207174036657

  3. 作业控制:允许用户管理属于当前shell会话的不同任务(作业)。这包括将作业放到后台执行或从前台恢复执行。作业和前台后台进程的概念我们稍后会谈。

会话、终端、bash三者的关系

Linux中的shell进程叫做bash,当用户通过xshell等ssh远程登录客户端中的终端登录后,这个终端成为bash进程的控制终端,而这个终端中的所有进程组(前台和后台)构成一个会话(当你登录系统并启动bash时,实际上就开启了一个新的会话。),画图来表示就是下面这样:

image-20250207181459757

前台进程与后台进程

概念

前台进程和后台进程都是进程,唯一区别就是前台进程可以通过终端接收用户的输入,同时也可以接收来自用户的命令(ctrl Cctrl Z),前台进程还可以将输出输入到显示器(也就是终端上)。但是后台进程则不同,它不直接与用户交互,即它们不接受键盘输入,也不将输出直接显示给用户(除非特别配置)。

特点

  1. 前台进程
    • 独占性:同一终端,同一时刻,只能有一个进程或进程组。这意味着前台进程对输入输出有独占性。
    • 用户交互:前台进程可以直接通过终端与用户进行交互。这意味着它可以接受用户的输入,并将其显示在屏幕上。通常用户输入的命令,就是在前台运行。
    • 信号响应:前台进程组可以接收到某些类型的信号,比如通过按下Ctrl+C发送的SIGINT中断信号来终止当前操作。这是前台进程的一个重要特性,允许用户直接控制正在运行的程序。
  2. 后台进程
    • 并发执行:多个后台进程可以同时执行(并发是看似同时执行,实则轮询执行),一个终端可以有多个后台作业同时执行。
    • 无需与用户交互:不接收用户的输入,也不会将输出直接显示给用户。
    • 信号限制ctrl C等命令无法作用于后台进程,要使用killkillall等命令。

查看当前终端的后台进程

命令jobs可以查看当前终端的后台进程,它会显示每个后台作业的作业号和状态。

jobs

选项-l:添加 -l 选项后,jobs 命令不仅显示基本的作业信息,还会额外列出每个作业的进程ID(PID)。

前台进程与后台进程的切换

  1. 前台进程切换为后台进程

    • 方法1:在执行一个程序时,在后面加上&

      image-20250207183742115

    • 方法2ctrl Z暂停某个正在执行的前台进程,它将被切为后台进程:

      image-20250207184541663

    • 方法3:当某个子进程的父进程结束,它还在运行时它就会变成孤儿进程。无法通过ctrl C命令终止它的运行,因为孤儿进程被initSIDPID为1)进程收养,但可以通过killkillall命令终止它。可以认为这是一种特殊情况。

  2. 后台进程切换为前台进程

    • 使用命令fg(foreground的缩写)将后台进程切换为前台进程:

      fg 作业号
      

      image-20250207193051184

    • 扩展命令bg,这个命令可以将暂停的命令继续在后台运行。

      bg
      

    `
    image-20250207193909521

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

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

相关文章

MySQL的底层原理与架构

前言 了解MySQL的架构和原理对于很多的后续很多的操作会有很大的帮助与理解。并且很多知识都与底层架构相关联。 了解MySQL架构 通过上面的架构图可以得知&#xff0c;Server层中主要由 连接器、查询缓存、解析器/分析器、优化器、执行器 几部分组成的&#xff0c;下面将主要…

自动化测试工具selenium的安装踩坑

先安装Python 然后pip install selenium 浏览器安装驱动 火狐版本&#xff1a;132.0 geckodriver应用W3C WebDriver兼容远程服务器与根据gecko的浏览器互动的代理&#xff0c;该程序流程出示WebDriver协议书叙述的HTTP API&#xff0c;用以与Gecko浏览器(如Firefox)通讯 下…

apisix网关ip-restriction插件使用说明

ip-restriction插件可以在网关层进行客户端请求ip拦截。 当然了&#xff0c;一般不推荐使用该方法&#xff0c;专业的事专业工具做。建议有条件&#xff0c;还是上防火墙或者waf来做。 官方文档&#xff1a;ip-restriction | Apache APISIX -- Cloud-Native API Gateway whit…

Baklib赋能数字内容体验个性化推荐提升用户体验的未来之路

内容概要 随着数字化时代的不断发展&#xff0c;用户对内容消费的需求日益多样化&#xff0c;个性化推荐成为提升用户体验的重要手段。Baklib以其先进的技术手段&#xff0c;在数字内容领域内积极推动个性化推荐的实施&#xff0c;从而满足用户在信息获取和内容消费中的独特需…

【SqlServer】SQL Server Management Studio (SSMS) 下载、安装、配置使用及卸载——保姆级教程

超详细的 SQL Server Management Studio (SSMS) 下载、安装、连接数据库配置及卸载教程 SQL Server Management Studio (SSMS) 是微软提供的图形化管理工具&#xff0c;主要用于连接、管理和开发 SQL Server 数据库。以下是详细的 SSMS 下载、安装、连接数据库以及卸载的完整教…

【慕伏白教程】Zerotier 连接与简单配置

文章目录 下载与安装 WindowsLinux apt安装官方脚本安装 Zerotier 配置 新建网络网络配置 终端配置 WindowsLinux 下载与安装 Windows 进入Zerotier官方下载网站&#xff0c;点击下载 在下载目录找到安装文件&#xff0c;双击打开后点击 Install 开始安装 安装完成后&…

BUU22 [护网杯 2018]easy_tornado 1

打开题目以后出现三个文件&#xff0c;查看源代码&#xff0c;突破口在于这三个文件都有特殊的格式 python的tornado漏洞 Tornado 是一个用 Python 编写的 Web 框架&#xff08;和flask一样&#xff0c;只不过flask是轻量级的&#xff0c;而tornado可以处理高流量&#xff09…

Windows Docker笔记-Docker拉取镜像

通过在前面的章节《安装docker》中&#xff0c;了解并安装成功了Docker&#xff0c;本章讲述如何使用Docker拉取镜像。 使用Docker&#xff0c;主要是想要创建并运行Docker容器&#xff0c;而容器又要根据Docker镜像来创建&#xff0c;那么首当其冲&#xff0c;必须要先有一个…

接入 deepseek 实现AI智能问诊

1. 准备工作 注册 DeepSeek 账号 前往 DeepSeek 官网 注册账号并获取 API Key。 创建 UniApp 项目 使用 HBuilderX 创建一个新的 UniApp 项目&#xff08;选择 Vue3 或 Vue2 模板&#xff09;。 安装依赖 如果需要在 UniApp 中使用 HTTP 请求&#xff0c;推荐使用 uni.requ…

攻防世界 文件上传

题目名称-文件包含 今天的题大概提一下解题思路就好了 这里要使用php://filter 在此基础上因为网页过滤了一些关键字 我们要进行爆破 UCS-4* UCS-4BE UCS-4LE* UCS-2 UCS-2BE UCS-2LE UTF-32* UTF-32BE* UTF-32LE* UTF-16* UTF-16BE* UTF-16LE* UTF-7 UTF7-IMAP UTF-8* ASCII…

胜任力冰山模型:深入探索职业能力的多维结构

目录 1、序言 2、什么是胜任力&#xff1f; 3、任职资格和胜任力的区别 4、胜任力冰山模型&#xff1a;职场能力的多维展现 4.1、冰山水面上的部分 4.2、冰山水面下的部分 4.3、深层的个人特质与价值观 5、如何平衡任职资格与胜任能力 6、结语 1、序言 在快速发展的I…

在 Flownex 中创建自定义工作液

在这篇博文中&#xff0c;我们将了解如何在 Flownex 中为流网添加和定义一种新的流体温度相关工作材料。 Flownex 物料管理界面 在 Flownex 中使用与温度相关的流体材料时&#xff0c;了解其特性与温度的关系非常重要。这种了解可确保准确预测各种热条件下的流体行为&#xff0…

工业物联网平台-视频识别视频报警新功能正式上线

前言 视频监控作为中服云工业物联网平台4.0的功能已经上线运行。已为客户服务2年有余&#xff0c;为客户提供多路视频、实时在线监视和控制能力。服务客户实时发现现场、产线、设备出现随机故障、事故等&#xff0c;及时到场处理维修。 视频识别&视频报警新功能当前正式上…

4.PPT:日月潭景点介绍【18】

目录 NO1、2、3、4​ NO5、6、7、8 ​ ​NO9、10、11、12 ​ 表居中或者水平/垂直居中单元格内容居中或者水平/垂直居中 NO1、2、3、4 新建一个空白演示文稿&#xff0c;命名为“PPT.pptx”&#xff08;“.pptx”为扩展名&#xff09;新建幻灯片 开始→版式“PPT_素材.doc…

NetCore Consul动态伸缩+Ocelot 网关 缓存 自定义缓存 + 限流、熔断、超时 等服务治理

网关 OcelotGeteway 网关 Ocelot配置文件 {//单地址多实例负载均衡Consul 实现动态伸缩"Routes": [{// 上游 》》 接受的请求//上游请求方法,可以设置特定的 HTTP 方法列表或设置空列表以允许其中任何方法"UpstreamHttpMethod": [ "Get", &quo…

数据结构与算法(test1)

一、树和二叉树 1. 看图&#xff0c;完成以下填空 (1).树的度为________。 (2).树中结点的最大层次&#xff0c;称为树的_____或树的______&#xff0c;值是______。 (3).结点A和B的度分别为________ 和 ________。 (4).结点A是结点B的________。 (5).结点B是结点A的________…

【GitLab CI/CD 实践】从 0 到 1 搭建高效自动化部署流程

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…

Kubernetes是什么?为什么它是云原生的基石

从“手工时代”到“自动化工厂” 想象一下&#xff0c;你正在经营一家工厂。在传统模式下&#xff0c;每个工人&#xff08;服务器&#xff09;需要手动组装产品&#xff08;应用&#xff09;&#xff0c;效率低下且容易出错。而Kubernetes&#xff08;k8s&#xff09;就像一个…

算法与数据结构(删除有序数组的重复项)

思路 题目要求需要在原地删除重复的元素&#xff0c;这说明不能使用额外的空间。我们可以使用一个索引index来记录赋值的位置&#xff0c;以此来不断地删除重复的元素。 解题过程: 我们可以首先求得nums的长度len 若没有元素&#xff0c;直接返回0。 从第二个元素开始遍历…

[论文阅读] Knowledge Fusion of Large Language Models

Knowledge Fusion of Large Language Models (FuseLLM) Methodology 整体Pipeline如下图所示 不同的动物代表不同的LLM。左边第一&#xff0c;第二分别是Ensemble以及Weight Merging方法。最右侧为本文提出的FuseLLM。 Ensemble: 融合多个models的预测结果&#xff0c;比如…