linux---进程通信

提示:以下是本篇文章正文内容,下面案例可供参考

一、匿名管道

进程之间的通信目的一般是来控制另一个进程。也可以用来实现数据的交流,还有资源共享等。

匿名管道原理:

(铺垫)进程之间是具有独立性,而linux是以文件来管理数据的,决定了实现共享文件必须由操作系统来提供内存级别的缓存区来存储数据,实现进程的数据共享。

例如:fork()创建父子进程之间是数据相同,但发生写入操作时,会发生写时拷贝,因为进程具有独立性,它们俩个的文件描述符表内容也是相同的,但是文件表述符表里的文件标识符指向的文件却是同一份文件。两个进程都具有对该文件的读写功能,关闭父进程的对以写功能的该文件(保留了那个以读方式打开的文件),子进程相反保留了写的关闭了读的,这样两个进程就实现了一个读一个写,它们之间是单向通信。由于该文件是由操作系统提供的,所以它提供了系统接口来实现管道通信。

系统调用接口pipe函数 :如果创建成功就返回0,如果失败就返回-1。pipefd[0]是默认以分配以读方式打开的文件描述符。pipefd[1]是以读方式的

我们让子进程不断写入数据让计数器++,然后父进程读取子进程写入的数据。 

二、管道通信的四种情况

1. 子进程不写入数据的同时也不关闭写,那么父进程就会进行等待。

2.子进程不断写入数据直到将文件写满那么子进程就会堵塞,这时父进程读取就会读取全部的数据,读取完,子进程就写入数据。

3.子进程写入数据,之后在关闭写端,父进程会读取完管道的 数据,然后read()返回0,表示读取结束。

4.父进程关闭读同时子进程仍在写入,子进程就会发送退出信号给父进程,子进程也退出了

2.有名管道

有名管道的可以让不同的进程进行通信,这个特殊的文件(管道)由操作系统提供系统调用传建,同时数据不会向磁盘刷新数据(存储)。

原理:2个进程之间打开这个特殊的文件。可以对文件进行读写

创建:如果这里路径为./fifo,权限可以为0666.表示 在当前目录下创建了名为|fifo管道文件,权限为可读可写(可以用mask(0),处理系统默认的影响)

删除:

删除这个特殊文件,如果没删除,进程退出,那么这个文件也会被删除,因为文件生命周期随进程的

3.共享内存

共享内存原理:就是要物理内存上操作系统开辟一段空间,修改进程的页表(挂载),让物理地址映射到页表上的虚拟地址上,同时这个也是进程读取数据最快的方式,不过缺少了管道的同步机制,使得写入的数据任意时刻都会被挂载这个内存的其他进程,随时读取,造成信息的不完整性,这个需要我们自己控制。

1.共享内存的创建:

这里的key是内核区分共享内存的标记,size是申请的大小,shmflg是标识常用的是 IPC_CREAT或者是IPC_EXCL,通常IPC_CREAT和IPC_EXCL配合使用,表示如果通过key创建共享内存已存在就报错,不存在就不会报错。IPC_CREAT单独使用,如果通过key已经有了一个共享内存就会截取

2.获取key

proj_id是一个数字,ftok会用proj_id和pathname形成唯一的key

2.获取共享内存

实际上截取和创造共享内存是同个函数只是选择的不同,一个进程创造共享内存,一个进程通过同个key截取这个共享内存,这样两个进程挂载后这个共享内存就可以实现通信了。

3.获取共享内存的相关属性

shmct可以获取共享内存一些信息,当然选项的不同也有其他的功能比如选项是IPC_RMID就是删除,如果cmd是IPC_STAT,我们申请一个shmid_ds类型的结构体,系统会把共享内存一些信息拷贝到这个结构体中,比如:

2.共享内存的删除(指令/系统函数)

指令:ipcrm -m  +shmid

函数:

共享内存的生命是随内核的,如果不主动删除,就会一直存在,除非重启linux

3.挂载(at)和删除挂载(dt)

挂载就是修改进程的页表,把物理内存映射到虚拟地址上,通过这个虚拟地址就可以找到物理内存

4.消息队列 

消息队列是一个具有数据类型的队列,因为 不同进程既能获取也可以写入数据,为了区分哪个数据是哪个进程的也为了方便进程获取各自需要的数据。

1.创建

2.获取属性或者删除

3.写入数据和读取

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

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

相关文章

超市进销存|基于SprinBoot+vue的超市进销存系统(源码+数据库+文档)

超市进销存系统 目录 基于SprinBootvue的超市进销存系统 一、前言 二、系统设计 三、系统功能设计 1 登录注册 2 管理员功能模块 3员工功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍&#x…

【时间复杂度和空间复杂度之间的故事】

【时间复杂度和空间复杂度之间的故事】 一.前言 二.时间复杂度定义时间复杂度的计算规则习题 三.空间复杂度定义计算方法习题空间复杂度 O(1)空间复杂度 O(n) 本文主要讲解关于时间复杂度与空间复杂度 😀😃😁😁😇&…

桂林电子科技大学计算机工程学院、广西北部湾大学计信学院莅临泰迪智能科技参观交流

5月18日,桂林电子科技大学计算机工程学院副院长刘利民、副书记杨美娜、毕业班辅导员黄秀娟、广西北部湾大学计信学院院长助理刘秀平莅临广东泰迪智能科技股份有限公司产教融合实训基地参观交流。泰迪智能科技副总经理施兴、广西分公司郑廷和、梁霜、培训业务部孙学镂…

Outlook 开启smtp配置

微软 Outlook 邮箱各种服务详细信息 服务类型服务器地址端口加密方法POPoutlook.office365.com995TLSIMAPoutlook.office365.com993TLSSMTPsmtp.office365.com587STARTTLS 然而仅仅有以上信息还不够,需要获取服务密码 (授权码) 才能够使用 POP, IMAP, SMTP 这三种…

常见应用流量特征分析

目录 1.sqlmap 1.常规GET请求 2.通过--os-shell写入shell 3.post请求 2.蚁剑 编码加密后 3.冰蝎 冰蝎_v4.1 冰蝎3.2.1 4.菜刀 5.哥斯拉 1.sqlmap 1.常规GET请求 使用的是sqli-labs的less7 (1)User-Agent由很明显的sqlmap的标志,展…

基础常用动词,柯桥西班牙语培训

1. Ser:是 表示身份: Soy Ana. Soy estudiante. 我是安娜。我是一名学生。 表示属性: Es duro. 这是硬的。 表示国籍: Soy espaol, de Madrid. 我是西班牙人,来自马德里。 2. Estar: 是..., 在... 表示身体状况: Estoy muy cansada, necesito dormir.我很…

JMH301【亲测】5月最新整理【神鬼传奇】斗罗超变单机版175级新宠物宝宝坐骑丰富超变定制装备带完整GM命令网游单机虚拟机一键端

资源介绍: 是否需要虚拟机:是 文件大小:压缩包约8.6G 支持系统:win7、win10、win11 硬件需求:运行内存8G 4核及以上CPU 下载方式:百度网盘 内容持续更新! 资源截图: 下载地址…

DataBinding viewBinding(视图绑定与数据双向绑定)简单案例 (kotlin)

先上效果: 4个view的文字都是通过DataBinding填充的。交互事件:点击图片,切换图片 创建项目(android Studio 2023.3.1) Build.gradle(:app) 引入依赖库(完整源码) buildFeatures { vie…

Docker访问文件权限受限问题解决

问题描述 运行项目的docker环境,新添加了一个数据集,但是数据集的访问权限受限(Permission dinied),运行的命令如图所示 问题解决 chmod 777 xxx YYDS!!!但是单纯直接运行会因为权限…

产品经理-交互说明撰写(八)

1. 交互说明 交互说明可以看做是交互设计师或者产品经理输出的最核心的”产品“交互说明面向的”用户“是下游的同事 ⇒ UI设计师、开发工程师、测试工程师 2. 基本交互形式 2.1 页面交互 2.2 元素控件交互 3. 交互说明主要包括以下3个维度 3.1 页面流程(页面之…

OpenFeign高级用法:缓存、QueryMap、MatrixVariable、CollectionFormat优雅地远程调用

码到三十五 : 个人主页 微服务架构中,服务之间的通信变得尤为关键。OpenFeign,一个声明式的Web服务客户端,使得REST API的调用变得更加简单和优雅。OpenFeign集成了Ribbon和Hystrix,具有负载均衡和容错的能力&#xff…

在 Android 上存档短信:4 种方法的终极指南

概括 无论是个人对话还是专业信件,我们的短信收件箱很快就会因大量线程和对话而变得混乱。为了帮助管理这种过载,许多 Android 用户转向了归档短信这一便捷功能。在本指南中,我们将探讨如何在 Android 设备上存档短信的详细信息,…

Django中使用Celery(通用方案、官方方案)

Django中使用Celery(通用方案、官方方案) 目录 Django中使用Celery(通用方案、官方方案)通用方案场景前置准备完整代码 Celery官方方案【1】注册celery配置【2】创建celery文件【3】init注册【4】添加任务【5】启动worker异步任务…

【qt】下拉列表组件

下拉列表组件 一.Combo Box1.可以直接双击编辑下拉内容2.代码初始化下拉内容3.一次性添加多个下拉内容4.下拉框手动编辑5.下拉内容添加附加值6.下拉添加图标7.获取下拉值 二.总结 一.Combo Box 还是老样子,咱们边做边练 目标图: 1.可以直接双击编辑下…

ThreadLocal原理及使用

一、引言 在Java多线程编程中,ThreadLocal是一个非常有用的工具,它提供了一种将对象与线程关联起来的机制,使得每个线程都可以拥有自己独立的对象副本,从而避免了线程安全问题。然而,使用不当会导致内存泄漏问题。 二…

el-input 自动获取焦点

前言: 需求描述:在 Dialog 对话框中 使用 input 组件;当点击按钮,Dialog 对话框显示,且里面的 input 组件要自动获取焦点。因为页面上还存在其他的 input 组件,所以使用 自动获取焦点属性没用!&…

AppInventor2要在界面上做一个电量图标,有什么好的思路吗?

问:要在界面上做一个电量图标,有什么好的思路吗? 答:首先,很容易想到使用进度条相关的组件,原生”滑动条“组件可以吗? 答案显而易见,首先它的样式自定义不够,UI不外乎上…

使用Flask Swagger自动生成API文档

文章目录 安装Flask Swagger使用Flask Swagger生成API文档总结1. 自动化文档生成2. 交互式文档展示3. 规范化API设计4. 提升协作效率5. 支持多种格式 Flask Swagger是一种用于管理Flask API文档的工具。它基于OpenAPI规范,可以自动生成API的交互式文档。使用Flask S…

明火炒菜不安全?NO 华火新能源电燃灶“电生明火”安全又环保

明火炒菜,色味俱全,这就是为什么电磁炉(无火)炒菜不好吃,越来越少人用的主要原因! 在中国,明火炒菜这一传统的烹饪方式延绵了几千年,是中华文化传承的瑰宝,早已根深蒂固于…

k8s 部署 CoreDNS master02 节点部署 负载均衡部署

目录 一、部署 CoreDNS 1.1.在所有 node 节点上操作 1.2.在 master01 节点上操作 1.3.DNS 解析测试 二、master02 节点部署 2.1.从 master01 节点上拷贝证书文件、各master组件的配置文件和服务管理文件到 master02 节点 2.2.修改配置文件kube-apiserver中的IP 2.3.在 …