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 使用信号避免僵尸进程

在这里插入图片描述

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

通用后台管理系统(一)——项目介绍

目录 二、文档结构 src文件夹: 三、技术和插件 1、Vue router 2、element-ui框架 3、样式插件less 4、vuex状态管理 5、axios.js 6、mock.js模拟数据 7、echarts图表工具 四、项目效果展示 总结 一、项目介绍 通用后台管理是采用vue2cli开发的项目&#…

国行版苹果Vision Pro即将发售 高昂定价吓退普通消费者?

2024年2月2日,苹果第一代空间计算设备Vision Pro在美国上市。6月28日,国行版苹果Vision Pro也将正式发售,别为256GB版29999元、512GB版31499元、1TB版32999元。不过从此前Vision Pro预售情况来看,Vision Pro的“杀手锏”在“价格”…

Arduino - 继电器

Arduino - 继电器 In a previous tutorial, we have learned how to turn on/off an LED. In this tutorial, we are going to learn how to turn on/off some kind of devices that use the high voltage power supply(such as a light bulb, fan, electromagnetic lock, lin…

# Kafka_深入探秘者(8):kafka 高级应用

Kafka_深入探秘者(8):kafka 高级应用 一、kafka 消费组管理 1、kafka 命令行工具 参考官网: http://kafka.apache.org/22/documentation.html 2、kafka 消费组管理:查看消费组 # 切换到 kafka 安装目录 cd /usr/local/kafka/…

WIFI7技术之多重资源单元(Multi-RU)技术

什么是WIFI7及Multi-RU技术? 随着无线通信技术的不断进步,WiFi技术也在不断演变。WIFI7,即IEEE 802.11be,是下一代无线网络标准。它旨在提供更高的带宽、更低的延迟和更好的用户体验。WIFI7引入了许多新特性,其中之一…

PostgreSQL 连接器:在 SeaTunnel 中的应用与优势

在现代企业中,数据已经成为核心资产,基于开源数据集成平台SeaTunnel,工程师如何高效地连接和管理这些数据源,直接关系到企业的竞争力和运营效率。 本文将给大家介绍如何通过 JDBC PostgreSQL 数据源连接器,在 SeaTunne…

使用Flink CDC实时监控MySQL数据库变更

在现代数据架构中,实时数据处理变得越来越重要。Flink CDC(Change Data Capture)是一种强大的工具,可以帮助我们实时捕获数据库的变更,并进行处理。本文将介绍如何使用Flink CDC从MySQL数据库中读取变更数据&#xff0…

Docker部署常见应用之Oracle数据库

文章目录 安装部署参考文章 安装部署 使用Docker安装Oracle数据库是一个相对简便的过程,可以避免在本地环境中直接安装Oracle数据库的复杂性。 安装Docker环境:确保你的系统上已经安装了Docker,并且Docker服务正在运行。具体的安装方法可以根…

TikTok网页版使用指南:如何登录TikTok网页版?

海外版抖音TikTok,已成为连接全球观众的重要平台。据统计,在美国,TikTok的用户数量已达到近1.3亿,并且在国外的95后用户群体中很受欢迎。 TikTok网页版也提供了一个广阔的平台,让品牌和创作者在电脑端与全球观众互动&…

数据结构与算法基础(王卓)--学习笔记

1 数据结构分类 1.1 逻辑结构分类 集合结构线性结构:线性表、栈、队列、串树形结构图形结构 1.2 物理结构分类 逻辑结构在计算机中的真正表示方式(又称为映射)称为物理结构,也可叫做存储结构 顺序存储结构:数组链…

【Unity】Excel配置工具

1、功能介绍 通过Excel表配置表数据,一键生成对应Excel配置表的数据结构类、数据容器类、已经二进制数据文件,加载二进制数据文件获取所有表数据 需要使用Excel读取的dll包 2、关键代码 2.1 ExcelTool类 实现一键生成Excel配置表的数据结构类、数据…

Centos7源码方式安装sqle及开发相关

官方文档-源码安装 操作系统:centos:7.9,everything (DVD版应该也可以) (在ubuntu22.04装了两天之后乖乖开了一个新Centos7虚拟机) 镜像:清华大学开源软件镜像站 centos/7.9.2009 安装git sudo yum update -y sudo yum install -y git git --version安…

Sonia索尼娅:填补心理健康护理缺口的创新人工智能治疗师应用APP

聊天机器人可以取代人类治疗师吗?一些初创公司和患者声称他们可以。但这并不是完全确定的科学。 一项引人注目的研究发现,高达80%的使用OpenAI的ChatGPT寻求心理健康建议的人认为,这项技术可作为传统治疗的理想替代方案。与此同时&#xff0…

Android高级面试_2_IPC相关

Android 高级面试-3:语言相关 1、Java 相关 1.1 缓存相关 问题:LruCache 的原理? 问题:DiskLruCache 的原理? LruCache 用来实现基于内存的缓存,LRU 就是最近最少使用的意思,LruCache 基于L…

国外8年联培访学迎来逆袭|国家最高科学技术奖薛其坤成长史

国家最高科技奖花落薛其坤,他是该奖项史上最年轻得主。在追踪其成长史的过程中,知识人网小编注意到:薛其坤的学习研究开局并不顺利,直至到日本做联合培养博士研究生,他才真正迎来了自己学术生涯的重要转折点。后来到美…

面试相关-接口测试常问的问题

1.为什么要做接口测试 (1)现在大多系统都是前后端分离的项目,前端和后端的进度可能不一样,那为了尽早的进入测试,前端界面没有开发完成的情况下,只要后端的接口开发完了,就可以提前做接口测试了; (2)基于安全考虑,只依赖前端进行限制,已经完全不满足系统的安全性…

ELK日志集成

https://www.bilibili.com/video/BV1x94y1674x/?buvidXY705117E90F73A790429C9CFBD5F70F22168&vd_source939ea718db29535a3847d861e5fe37ef

Aigtek:为何要使用电压放大器

电压放大器在现代电子技术中起到了至关重要的作用。它是一种电子设备,用于将输入信号的电压增大到所需的输出电压水平。电压放大器的使用有以下几个方面的原因和优势。 电压放大器可以提高信号的强度和质量。许多实际应用中的输入信号往往很微弱,比如来自…

“管式加热炉简单控制系统和串级控制系统设计与Matlab仿真”,高分资源,匠心制作,下载可用。强烈推荐!!!

“管式加热炉简单控制系统和串级控制系统设计与Matlab仿真”毕业设计,高分资源,匠心制作,下载可用。强烈推荐!!! 1.控制目标 加热炉的任务是把原油加热到一定温度,以保证下道工艺的顺利进行。…

windows安装mysql8.0.35保姆级教程

一、下载mysql安装包 点击mysql安装包下载链接:https://downloads.mysql.com/archives/community/ 选择window版本,点击下载按钮,如下所示: 二、解压安装包并新建my.ini文件 将下面内容复制到新建的my.ini文件里面 [mysqld] #…