linux---进程通信

news2024/11/13 9:27:02
提示:以下是本篇文章正文内容,下面案例可供参考

一、匿名管道

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

匿名管道原理:

(铺垫)进程之间是具有独立性,而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.写入数据和读取

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

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

相关文章

mysql实战——xtrabackup全量备份/增量备份及恢复

一、测试前准备 mysql数据库 端口3306数据文件目录 /data/mysql/3306/data 安装目录/usr/lcoal/mysql配置文件/etc/my.cnf 创建数据库 testXtra 创建备份目录 备份目录/data/backup/备份恢复数据文件目录/data/mysql/3307/data备份恢复配置文件/etc/my_3307.cnf 二、开始…

宠物医院兽医电子处方管理系统软件操作教程,佳易王兽医处方软件分享

试用超级版宠物医院兽医处方管理系统软件V17.3,软件功能实用,操作简单。试用版免费试用,技术支持可以联系客服。 一、软件下载说明及软件操作教程链接 软件下载请点击最下方官网卡片进入 1、软件下载注意事项 【特别说明:下载的…

比亚迪一4S店着火:浅述烟火识别技术与消防安全预警方案的必要性

据新闻报道,2024年5月16日,福建福州一家比亚迪4S店发生火灾。事发后,当地消防立即调员赶往现场救援,大火导致展厅展车基本烧毁,部分维修车辆受损,没有人员伤亡。 随着汽车市场的不断扩大,4S店作…

web自动化文件上传弹框处理

目录 文件上传介绍文件上传处理Alert 弹窗介绍Alert 弹窗处理 课程目标 掌握文件上传的场景以及文件上传的处理方式。掌握 Alert 弹窗的场景以及 Alert 弹窗的处理方式。 思考 碰到需要上传文件的场景,自动化测试应该如何解决? 文件上传处理 找到文…

linux中的arch命令使用

arch 显示当前主机的硬件架构类型 概要 arch [OPTION]...主要用途 打印机器架构信息;arch 命令输出结果有:i386、i486、i586、alpha、sparc、arm、m68k、mips、ppc、i686等。 选项 --help 显示帮助信息并退出。 --version 显示版本信息并…

华为大咖说 | 企业应用AI大模型的“道、法、术” ——道:认知篇

本文作者:郑岩(华为云AI变革首席专家)全文约3313字,阅读约需8分钟,请仔细看看哦~ 前阵子,我在公司内部发了一篇Sora的科普贴,本来只是个简单的技术总结,但让我意外的是,…

pyqt5与yolov5进行视频检测(一)——登录操作

项目效果展示 一、登录界面 二、主界面 目前在更新中。。。 一、设计 二、登录代码 注意:下面会导入主界面的包,图片资源自己设计一下,密码保存时没设计加密,需要自行设计 main_window主界面下文会设计from main_window impor…

新《体外诊断试剂分类目录》已发布,企业应该如何应对?

除了新版《体外诊断试剂分类目录》的变化外(见:体外诊断试剂分类目录的变与不变),最值得关心的是:- 2024版《体外诊断试剂分类目录》发布以后,过渡期多久?- 当前分类目录背景下如何管理?- 对在研、已取证、…

编程学习 (C规划) 6 {24_4_14} 六 ( 函数 )

1.函数的概念 C语言中函数就是一个子程序,C语言中的函数就是一个完成某项特定任务的一小段代码,有特殊的写法哥调用方法。 C语言中一般会见到两种函数 (1)库函数 (2)自定义函数 2.库函数 其实就是C语…

【MATLAB】基于VMD-SSA-LSTM的回归预测模型

有意向获取代码,请转文末观看代码获取方式~ 1 基本定义 基于VMD-SSA-LSTM的回归预测模型是一种结合了多种时间序列分析和机器学习技术的综合模型。下面我将分别介绍这三个组成部分的基本原理,并解释它们是如何结合起来进行回归预测的。 变分模态分解&a…

VMware Workstation 虚拟机安装 ubuntu 24.04 server 详细教程 服务器安装图形化界面

1 阿里云下载 ubuntu-releases安装包下载_开源镜像站-阿里云 2 打开vmware,新建虚拟机 3 选择下载的镜像,开始安装 3 光驱这里修改下 4 重新启动,安装图形化界面 #更新软件包列表 sudo apt-get update #安装Ubuntu图形桌面 sudo apt install ubuntu-desktop 5 安…

Helm安装kafka3.7.0无持久化(KRaft 模式集群)

文章目录 2.1 Chart包方式安装kafka集群 5.开始安装2.2 命令行方式安装kafka集群 搭建 Kafka-UI三、kafka集群测试3.1 方式一3.2 方式二 四、kafka集群扩容4.1 方式一4.2 方式二 五、kafka集群删除 参考文档 [Helm实践---安装kafka集群 - 知乎 (zhihu.com)](https://zhuanlan.…

《黑龙江日报》是什么级别的报刊?

《黑龙江日报》是什么级别的报刊? 《黑龙江日报》是省级党报。它是黑龙江省重要的主流媒体之一,在传达党的方针政策、反映社会动态、推动地方发展等方面发挥着重要作用。具有较高的权威性和影响力,为黑龙江省的新闻传播和信息交流做出了重要…

云动态摘要 2024-05-24

给您带来云厂商的最新动态,最新产品资讯和最新优惠更新。 最新优惠与活动 [免费试用]大模型知识引擎体验招募 腾讯云 2024-05-21 大模型知识引擎产品全新上线,为回馈新老客户,50万token免费送,开通服务即领取! 云服…

清空了电脑回收站,之前的文件还能否恢复?

电脑已成为我们日常生活中不可或缺的一部分。我们在电脑上处理文档、保存图片、下载视频等,而电脑中的回收站则成为我们处理不再需要文件的一个便捷工具,当我们想要删除某些文档的话,它并不是立即从硬盘上消失,而是被系统移动到了…

SwanLab入门深度学习:BERT IMDB文本情感分类

基于BERT模型的IMDB电影评论情感分类,是NLP经典的Hello World任务之一。 这篇文章我将带大家使用SwanLab、transformers、datasets三个开源工具,完成从数据集准备、代码编写、可视化训练的全过程。 观察了一下,中文互联网上似乎很少有能直接…

光敏聚酰亚胺(PSPI)行业技术壁垒较高 本土企业已具备相关产品量产能力

光敏聚酰亚胺(PSPI)行业技术壁垒较高 本土企业已具备相关产品量产能力 光敏聚酰亚胺(PSPI)又称光敏PI、光刻胶用聚酰亚胺,指将光敏基团引入聚酰亚胺分子链中制成的高性能有机材料。PSPI拥有极佳耐热性、化学稳定性、热…

新书推荐:6.1 if语句

计算机语言和人类语言类似,人类语言是为了解决人与人之间交流的问题,而计算机语言是为了解决程序员与计算机之间交流的问题。程序员编写的程序就是计算机的控制指令,控制计算机的运行。借助于编译工具,可以将各种不同的编程语言的…

Jenkins工具系列 —— 通过钉钉API 发送消息

文章目录 钉钉环境搭建使用钉钉API接口 发送消息机器人安全设置使用自定义关键词机器人安全设置使用加签方式 资料下载 钉钉环境搭建 在jenkins安装钉钉插件以及小机器人,这部分内容可参考:插件 钉钉发送消息 使用钉钉API接口 发送消息 机器人安全设置…

Day02:LeedCode977. 有序数组的平方 209.长度最小的子数组 59.螺旋矩阵II

详解:Day2:LeedCode977. 有序数组的平方 209.长度最小的子数组 59.螺旋矩阵II-CSDN博客 977. 有序数组的平方 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 示例 1: 输入&#…