Linux进程间通信机制详谈

linux下常用四大进程间通信机制 linux下常用四大进程间通信机制 Linux环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能相互访问,要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication... 阅读详情

Linux进程间通信机制

Unix系统提供的进程间通信机制主要有:

  • 管道和FIFO(命名管道)
  • 套接字
  • 信号
  • 信号量
  • 消息队列
  • 共享内存区
管道pipe

在这里插入图片描述

管道机制思想是在内存中创建一个共享文件,从而使得通信双方利用该共享文件进行交互。需要注意的是管道数据流动是单向的,是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道。管道只在具有公共祖先的两个进程之间使用,可以将管道视为一个独立的文件系统,管道在管道两侧的进程看来就是一个文件,只是这个文件只存在于内存中。

一个进程写入管道的所有数据由内核定向到另一个进程,另一个进程就可以从管道中读取数据。当缓冲区读空或者写满时,有一定的规则控制相应的读进程或者写进程进入等待队列,当空的缓冲区有新数据写入或者满的缓冲区有数据读出来时,就唤醒等待队列中的进程继续读写。

在Unix的shell中,通过 “|” 创建管道(样子就像管道一样),将前面的进程的标准输出重定向到管道中,然后后面的进程从管道中读取输入。

管道的创建:应用程序调用pipe系统产生管道,该调用将返回两个文件描述符,分别用于管道的两侧。由于两个描述符位于同一个进程,因此进程自身通信,好像没太大作用,但是通过fork或者clone复制进程时管道也会被复制,因此管道通信就是利用该性质,实现了具有公共祖先的进程之间的通信。

常用的操作就是创建一个连接到另一个进程的管道,然后将其输出或向其输入端发送数据。标准IO库提供了两个函数,popen 和 pclose,这两个函数可以实现:创建一个管道,fork一个子进程,关闭未使用的管道端,执行一个shell运行命令,等待命令终止。

管道具有局限性:只支持单向数据流,没有名字,缓冲区有限等

命名管道FIFO

管道很简单灵活有效,但是有一个比较大的缺点,那就是无法打开已经存在的管道,即两个进程不能共享同一个管道,同时匿名管道,由于没有名字,只能用于亲缘关系的进程间通信。故Unix引入了命名管道,或称为FIFO(先进先出),因为这是一种最先写入文件的字节总是最先被读出的特殊文件类型。

FIFO文件包含在系统的文件树中,即拥有磁盘索引节点。因此哪怕没有亲缘关系的进程也可以通过该方式消息传递。

  • FIFO的索引节点出现在系统目录树上
  • FIFO是一种双向通信管道,即一个进程可以以读/写模式打开一个FIFO

通过mkfifo函数创建FIFO文件,之后可以用open打开它。命名管道在打开时需要确实该管道已经存在,否则将阻塞。即以读方式打开某管道,在此之前必须一个进程以写方式打开管道,否则阻塞。此外,可以以读写(O_RDWR)模式打开有名管道,即当前进程读,当前进程写,不会阻塞。
在这里插入图片描述

消息队列

在这里插入图片描述
消息传递机制通过消息队列实现,发送方产生消息并将消息写到队列,之后一个或多个其他进程从队列获取消息。消息包含消息正文还有一个数,该数用来使消息队列实现多种不同类型的消息,接收者通过该数字获取自己想要的消息。消息读取后将从队列中删除,即便是很多进程在同一个信道上监听,每一个消息仍然只能被一个进程读取。即进程产生的

Linux 进程间通信 Linux进程通信继承了传统的UNIX进程间通信方式,包括无名管道、有名管道以及信号;还有System V进程间通信(IPC),包括System V消息队列、System V信号量以及System V共享内存;套接字。 阅读详情

相关推荐

借助OSS搭建在线教育视频课程分享网站-阿里云的课程体验和记录

阿里云的《搭建在线教育网站》免费课程里面讲的啥,我点进去看了看

LegendNoTitle的博客 3023

李沐之数值稳定性+模型初始化和激活函数

层记为t,这里的y不是预测,还包括了损失函数,y是优化函数,不是预测的结果y。第t层是输出。所有的h都是一些向量,向量关于向量的导数是一个矩阵,所以用了很多次的矩阵乘法,出问题就在这里。

m0_51133942的博客 1527

从Unitree B2W到四足机器人:用Isaac Lab构建强化学习奖励函数的5个实战技巧

本文分享了在Isaac Lab仿真环境中,为Unitree B2W等四足机器人设计强化学习奖励函数的5个核心实战技巧。内容涵盖奖励函数的结构化组合、轮腿混合机器人的适配策略、课程学习的动态调整、域随机化增强鲁棒性以及高效的调试可视化方法,旨在帮助开发者构建更稳定、高效的机器人运动策略。

lg888的博客 1065

计算机视觉研究方向有哪些?什么方向最好出论文创新点

计算机视觉(CV)是人工智能中一个活跃且应用广泛的研究领域,旨在让计算机理解和处理图像与视频。其主要研究方向包括图像分类、目标检测、图像分割、姿态估计、图像生成与重建、视频理解、三维视觉和跨模态视觉理解。这些方向不仅涉及基础理论,还紧密联系实际应用,适合发表论文和实现项目落地。为了在CV领域取得创新,建议关注跨模态学习、小样本学习、图像生成模型的控制与轻量化、视频分析以及医学图像分析等方向。此外,通过阅读顶会论文、复现SOTA方法、模型微调和数据集创新等方式,可以有效切入研究并产生有价值的成果。

OpenCVtuxiang的博客 3547

如何在INCA中修改标定量的初始值,并刷回控制器

测试过程中,有些时候,标定量来不及修改,这就需要修改标定量的初始值了,又不想打开模型重新编译,因此直接在INCA中修改,然后再刷回控制器,就成了最佳选择,之前也学过,长时间不用,忘记怎么搞了,最近又用到了,这次记录一下,以后用到的时候,就不用在网上东翻西找了。截止到2023年11月24日,共找到了两种方法可以实现修改。

weixin_43406519的博客 4198

详细解读文字识别工具———Tesseract-OCR

   在尝试破解12306验证码的时候,提前了解了一下应对各种验证码的解决方案,这里主要是学习到了面对文字图片验证码,例如亚马逊、豆瓣等平台的登录时会遇到的情况,效果还不错。 一、工具介绍 ​    Tesseract-OCR 是一款由HP实验室开发由Google维护的开源OCR(Optical Character Recognition...

别看我只是一只羊 2万+

Office 365中的Assigned Access详细功能介绍

本文系统介绍了Office365中AssignedAccess功能的应用与管理。作为Windows系统的重要安全特性,AssignedAccess可将设备锁定为单应用模式,有效防范未授权访问。文章详细阐述了其核心功能、技术架构及配置方法,包括UWP/Win32应用支持、多用户配置、与AzureAD集成等。通过MicrosoftEndpointManager可实现批量部署和远程监控,适用于公共终端、零售设备等场景。该功能为企业数字化转型提供了安全、可控的终端管理方案,在保障数据安全的同时优化用户体验。

xueyunshengling的博客 226

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: 操作系统设计思想--主奴思想
下一篇: 硬链接和软链接(实践说明)
coding丁
博客等级 码龄9年 383粉丝 147原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值