Linux高并发服务器开发(四)进程间通信

文章目录

  • 1 前言
  • 2 无名管道
  • 3 有名管道
  • 4 管道读写特点
  • 5 设置管道为非阻塞
  • 6 使用有名管道实现简单版本聊天
  • 7 共享存储映射
    • 7.1 mmap 存储映射函数
    • 7.2 共享映射实现父子进程通信
    • 7.3 共享映射实现无亲缘关系进程通信
    • 7.4 匿名映射实现父子进程通信
  • 8 信号
    • 8.1 概念和特点
    • 8.2 信号的编号
    • 8.3 信号的四要素
    • 8.4 信号的状态 阻塞信号集和未决信号集
    • 8.5 信号产生函数
      • KILL
      • raise
    • 8.6 信号捕捉 signal(避免使用)
    • 8.7 信号集和信号集操作函数 PCB
    • 8.8 sigprocmask 函数
    • 8.9 获取未决信号集
    • 8.10 信号处理方式
    • 8.11 信号捕捉 sigaction
    • 8.12 sigqueue
    • 8.13 不可重入,可重入函数
    • 8.14 使用信号避免僵尸进程


1 前言

进程是独立的资源分配单元,不同进程之间的资源是独立的,不能直接在一个进程中直接访问另一个进程的资源。
在这里插入图片描述
主要通信机制
在这里插入图片描述

2 无名管道

在这里插入图片描述
在这里插入图片描述
无名管道的创建 pipe函数,fd[0]用于读fd[1]用于写
在这里插入图片描述

父子进程通过无名管道通信

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
管道是阻塞的,如果是子进程先执行,则会阻塞

3 有名管道

有名字,可以在无亲缘关系的进程间通信。
在这里插入图片描述
创建管道(通过命令)
在这里插入图片描述
创建管道(通过函数 mkfifo)

在这里插入图片描述
在这里插入图片描述
有名管道的读写

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

4 管道读写特点

在这里插入图片描述
四种情况:
1.写端没关闭,管道中没有数据,这时候都管道进程读管道,会发生阻塞。
如果写端没有关闭,管道中有数据,读管道会将数据读出,下次读没有数据就会阻塞。
2. 所有写端关闭,读进程读管道内容,读取全部内容,最后返回0
3. 所有读端没有关闭,管道写满了,写管道进程写管道会被阻塞。
4. 所有的读端被关闭,写管道进程写管道会收到一个信号,然后退出。
5. 在这里插入图片描述
看管道大小
ulimit -a
在这里插入图片描述
查看管道缓冲区函数
在这里插入图片描述
在这里插入图片描述
设置管道为非阻塞

5 设置管道为非阻塞

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

6 使用有名管道实现简单版本聊天

使用两个管道

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
另一个talker把读写管道交换一下

可以使用多进程,子进程读,父进程写。

7 共享存储映射

在这里插入图片描述

7.1 mmap 存储映射函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意事项
在这里插入图片描述

7.2 共享映射实现父子进程通信

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

7.3 共享映射实现无亲缘关系进程通信


在这里插入图片描述

7.4 匿名映射实现父子进程通信

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

8 信号

8.1 概念和特点

中断:某一个信号产生时,处理信号时,对原来处理的事情进行暂停,并执行信号相应的函数,执行后再即系进行原来处理的事情
在这里插入图片描述
是一个异步的事情

在这里插入图片描述
信号可以直接进行用户控件进程和内核空间进程的交互,内核进程可以利用信号通知用户进程发生了什么系统事件。

8.2 信号的编号

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

8.3 信号的四要素

1)编号 2)名称 3)事件 4)默认处理动作
在 man 7 signal中查看
在这里插入图片描述
在这里插入图片描述

8.4 信号的状态 阻塞信号集和未决信号集

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

8.5 信号产生函数

KILL

在这里插入图片描述

raise

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

8.6 信号捕捉 signal(避免使用)

函数指针

在这里插入图片描述
sighandler_t 就是返回值为void ,参数为int的函数
返回函数指针,第一个信号,第二个函数指针变量(回调函数,void返回值,int为参数)
在这里插入图片描述
在这里插入图片描述
避免使用这个,应该使用sigaction
在这里插入图片描述
捕捉定时器,使用signal
在这里插入图片描述

8.7 信号集和信号集操作函数 PCB

在这里插入图片描述

未决信号集,阻塞信号集
在这里插入图片描述

未决信号集不能设置,只能读。阻塞信号集可以设置。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.8 sigprocmask 函数

信号阻塞集
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.9 获取未决信号集

在这里插入图片描述

在这里插入图片描述

8.10 信号处理方式

在这里插入图片描述

在这里插入图片描述

8.11 信号捕捉 sigaction

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

8.12 sigqueue

在这里插入图片描述

8.13 不可重入,可重入函数

在这里插入图片描述
信号处理函数应该是可重入函数

8.14 使用信号避免僵尸进程

在这里插入图片描述

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

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

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

相关文章

使用 shell 脚本同步 yum 源建立本地私有仓库

文章目录 [toc]事出有因脚本内容前端展示 事出有因 有两方面原因做了这个事情: dockerhub 国内无法访问centos 7 要停止社区支持了 结合两个情况,不久的将来,可能国内也就没有对应的 yum 仓库了(现在想找 centos 7 之前的仓库&…

防火墙GRE over IPSec配置

一、基础知识 1、GRE隧道 GRE隧道是一种网络通信协议,使用通用路由封装(GRE)技术,能够将一种网络协议下的数据报文封装在另一种网络协议中,从而实现在另一个网络层协议中的传输。 GRE隧道的基本概念和工作方式 基本…

HarmonyOS Next开发学习手册——代码混淆

代码混淆简介 针对工程源码的混淆可以降低工程被破解攻击的风险,缩短代码的类与成员的名称,减小应用的大小。 DevEco Studio提供代码混淆的能力并默认开启,API 10及以上版本的Stage模型、 编译模式为release 时自动进行代码混淆。 使用约束…

沙龙圆满举行 | 数据资产入表新动向·驱动企业新质生产力!

近日,由四川智慧城市发展联盟、璞华科技有限公司等公司主办的“数据治理与入表专题沙龙会”在成都圆满落幕。璞华科技有限公司作为数据治理、数据资产入表领域的领军企业,为此次盛会贡献了我们的专业见解与实战经验。 沙龙现场,业内精英齐聚一…

【技术追踪】SDSeg:医学图像的 Stable Diffusion 分割(MICCAI-2024)

这医学图像分割领域啊,终究还是被 Stable Diffusion 闯进去了~ SDSeg:第一个基于 Stable Diffusion 的 latent 扩散医学图像分割模型,在五个不同医学影像模态的基准数据集上超越了现有的最先进方法~ 论文:Stable Diffusion Segmen…

基于LangChain构建RAG应用

前言 Hello,大家好,我是GISer Liu😁,一名热爱AI技术的GIS开发者,上一篇文章中我们详细介绍了RAG的核心思想以及搭建向量数据库的完整过程;😲 本文将基于上一篇文章的结果进行开发,主…

配置Nginx二级域名

一、环境 (一)配置 1.服务器 linux CentOS 2.反向代理 Nginx 3.开放端口 云服务器开放端口80和443 二、域名备案 (一)腾讯云 1.腾讯云域名备案流程 备注:一级域名备案后,二级域名可以不用再备案&a…

AS-V1000外部设备管理介绍(国标GB28181设备管理,可以管理的国标设备包括DVR/NVR、IPC、第三方国标28181平台)

目录 一、概述 1、视频监控平台介绍 2、外部设备定义(接入的国标设备) 二、外部设备管理 2.1 外部设备添加 (1)设备侧的配置 (2)平台侧的配置 2.2 外部设备信息的修改 三、外部通道管理 3.1 外部…

React_创建一个项目

目录 一、React(js 版) 二、React(ts 版) 使用react创建一个项目,前提是确保你已经安装了Node.js和npm。 如果没有安装Node.js和npm,查看这个文件: 安装node.js和npmhttps://blog.csdn.net/zxy1993106…

GoSync+华为智能穿戴使用指导

GoSync官方简介: GoSync 是一款免费应用程序,主要用于将您的可穿戴设备中的步行、跑步、骑自行车和游泳等活动数据同步到您的 Google Fit 和其他健身平台。在开始同步数据之前,您需要将您的可穿戴设备账户与您的健身平台账户连接起来。在创建…

三元和磷酸铁锂电池有什么区别?

现在的电动车大多都会使用到锂电池,在常见的锂电池分为两种,一种是三元锂电池另外一种是磷酸铁锂电池,面对这两种锂电池时,它们到底有什么不同? 1、材料不同 这两种锂电池的不同之处便是材料不同,磷酸铁锂…

时间序列分析入门:概念、模型与应用【ARMA、ARIMA模型】

在这篇博客中,我们将全面探讨时间序列分析的基本概念和分类,深入理解平稳性及其检验方法,并介绍自回归模型(AR)、滑动平均模型(MA)、自回归滑动平均模型(ARMA)以及自回归…

Unity免费领高级可视化编程自定义节点工具AI行为UI流程对话树状态机逻辑等FlowReactor价值50刀high level20240627

刚发现一款类似虚幻蓝图的可视化编程工具,原价50刀,现在免费领取了。赶紧去领取入库,防止作者涨价。 高级可视化编程自定义节点工具:https://prf.hn/l/BJbdvnD 作者其他资产:https://prf.hn/l/YLAYznV Unity免费领高级…

提取url中的参数

let url https://alibaba.com?a1&b2&c3#hash function queryUrlParams(URL){let url URL.split(?)[1];const urlSearchParams new URLSearchParams(url);console.log(url1, urlSearchParams);console.log(entries,urlSearchParams.entries())const params Object…

华为---配置基本的访问控制列表(ACL)

11、访问控制列表(ACL) 11.1 配置基本的访问控制列表 11.1.1 原理概述 访问控制列表ACL(Access Control List)是由permit或deny语句组成的一系列有顺序的规则集合,这些规则根据数据包的源地址、目的地址、源端口、目的端口等信息来描述。A…

C++11 右值引用和移动语义,完美转发和万能引用,移动构造和移动赋值,可变参数模板,lambda表达式,包装器

文章目录 C11简介统一的列表初始化{}初始化std::initializer_list声明autodecltypenullptr 范围for循环 智能指针STL中一些变化右值引用和移动语义左值引用和右值引用左值引用与右值引用比较 右值引用使用场景和意义右值引用引用左值及其一些更深入的使用…

观成科技:证券行业加密业务安全风险监测与防御技术研究

摘要:解决证券⾏业加密流量威胁问题、加密流量中的应⽤⻛险问题,对若⼲证券⾏业的实际流量内容进⾏调研分析, 分析了证券⾏业加密流量⾯临的合规性⻛险和加密协议及证书本⾝存在的⻛险、以及可能存在的外部加密流量威 胁,并提出防…

PHP 超级全局变量详解

在PHP编程中,超级全局变量(Super Global Variables)是一种特殊的变量,可以在脚本的任何地方访问,而不受作用域限制。它们被设计用于在不同的脚本文件、函数和类之间共享数据,是PHP语言中非常重要和实用的特…

Knife4j 2.2.X 版本 swagger彻底禁用

官方文档配置权限:https://doc.xiaominfo.com/v2/documentation/accessControl.html#_3-5-1-%E7%94%9F%E4%BA%A7%E7%8E%AF%E5%A2%83%E5%B1%8F%E8%94%BD%E8%B5%84%E6%BA%90 通常有时候我们碰到的问题如下: 在开发Knife4j功能时,同很多开发者经常讨论的问…

MySQL数据库简介和安装

文章目录 一、数据库原理目前情况数据库的发展史RDBMS关系型数据库关系型数据库理论 二、MySQL历史发展历程关系型数据库和非关系型数据库 三、安装mysql及优化yum安装编译安装mysql二进制安装优化操作 四、 安装mycli插件客户端工具 一、数据库原理 目前情况 我们正处于一个…