0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux进程间通信趣味介绍

深圳东裕光大 来源:编程技术宇宙 作者:轩辕之风O 2021-08-27 10:28 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

月黑风高夜,突然听得咣当一声,Web服务器的目录下冒出了两个文件,弄出了不小的声响。这两个家伙一胖一瘦,鬼鬼祟祟,潜入这台计算机,不知要搞什么名堂。“二弟,一会儿咱们按照计划好的运行起来,分头行事,你等我信号,拿到数据后赶紧撤”,胖子对瘦子说到。“老大,这地方我不熟悉,我怎么等你信号?咱们得想个联系方式,一会儿通信使用”,瘦子说到。“这个不用担心,主人都交代好了”,胖子一边说,一边从背后拿出一本 《Linux进程间通信手册》 翻了起来。

信号

翻开手册的第一页,上面写着:信号——Signal,两个家伙开始认真研究起来。片刻之后,胖子程序说道:“唉,这个不行,往后翻吧!”瘦子程序不解,问道:“咋就不行啦?”“你看这里,手册上说了,信号是Linux上的一种软中断通信机制,可以向指定进程发送通知,总共有64种信号,不过这个信号只能作为通知使用,没办法传输数据”

“没法传输数据?那这玩意有什么用?”“还是有用啊,可以通知某个进程发生了什么事件,比如kill命令就是利用这个信号来告知进程退出从而实现杀进程的效果的”“原来如此”,瘦子程序若有所思的点了点头,此时胖子已经翻到了手册的第二页。

socket

“你看,手册上写了,可以用socket”,胖子说到。“socket?那不是网络通信使用的吗?”,瘦子有些疑惑。“是啊,不过咱们一样可以用来在本地计算机通信,把连接的IP地址换成127.0.0.1就行了”“感觉有点太招摇了,咱们计算机内部进程通信,数据还要经过网卡,很容易被发现的!”“不会不会,手册上说了,127.0.0.1是本地回环地址,数据在协议栈就进行转发了,根本不会到达网卡”

“那抓包能抓到咱们通信吗?”“嗯,让我看看···手册上说,可以在虚拟的回环网卡lo上抓到数据”“还是算了吧,咱干这事得悄悄进行,不能留下痕迹,你再看看还有没有别的招”听瘦子这么一说,胖子倒也觉得有理,便在手册上继续翻了起来。

匿名管道

“哎,有了有了,这个叫匿名管道的,听起来就比较隐秘,应该不会被发现。”瘦子接过手册,看了起来。这俩盯着手册上的两个图研究了半天,总算弄明白了,所谓匿名管道不过是内核中的一段缓冲区,提供了读写两个口子,通过fork创建子进程后,子进程继承了父进程的管道信息,两边只要约定好,一个读,一个写,就能实现通信了。

“老大,这匿名管道是单向的,咱们要通信,得整两根管道才行,一个你写我读,一个我写你读”“看起来挺靠谱,就这么干!”,二人达成了一致。胖子程序率先运行起来,随后创建了两个管道,一个用来发送消息,一个用来接收消息。接着执行fork,将瘦子程序也运行了起来。

时间过的很快,转眼已是深夜,随着计算机被关掉,两个家伙的进程也都退出了。半夜无人之际,硬盘中这两个家伙开始吵起来了。“你是怎么回事?我给你发消息怎么也不回,害得我一连发了一堆消息,最后把管道塞满了,我都阻塞了!”,胖子程序气愤地说道。“嗨!别提了,主人给我写的程序有bug,今天运行的时候不小心崩溃了,等我再次起来时,发现管道不见了,什么情况啊?”,瘦子程序说完叹了一口气。“那肯定不行,这匿名管道需要有亲缘关系的进程继承后才能通信,你用别的方式运行起来,肯定看不到我创建的管道啊!”“这匿名管道用起来太麻烦了,看看还有没有别的通信方式?”胖子程序又掏出了手册,翻了起来。

消息队列

“有了有了,这里还写了两种方式:命名管道、消息队列”,胖子程序说到。“命名管道?跟匿名管道有什么区别吗?”“命名管道有名字,有了名字就不限有亲缘关系的进程才能通信了,只要使用这个名字,都能打开管道通信,这下你就算挂了重启也能跟我联系上了”“那消息队列又是什么东西?”“额,让我看一下”“给我也看看”,瘦子程序凑了上去,一起看了起来。

过了一会儿,瘦子程序说道:“我看明白了,这消息队列是内核中的一个消息链表,按照消息块组织,比那管道全是二进制数据流堆积在一起好用多了”“有道理,而且这消息还可以指定类型,这样咱们俩就不用弄两个管道,一个消息队列就行了,咱们俩使用不同的消息类型,可省了不少事儿啊!”“那咱们就用消息队列吧,别用那什么管道了”“好,就这么干!”两个家伙一拍即合,准备第二天再大干一场。第二天,计算机启动后,它们又偷偷的运行了起来。这一次用上了消息队列,联络起来方便了不少。

共享内存

不知过了多久,那瘦子进程总算来信儿了,胖子从消息队列中取出一看,只见上面写着:

“老大,我拿到了数据了,需要你来处理一下,不过这数据体量有点大,用管道和消息队列传输效率都太低了,有无办法快速把数据传送给你,盼速回。”

胖子进程心里一阵欢喜,数据拿到了,总算可以回去交差了。不过怎么样快速把数据传送过来呢,心里又犯起了嘀咕。此时,胖子进程又一次拿出手册,翻到了最后一页,发现了一个叫“共享内存”的东西,仿佛像抓住了救命稻草一般,仔细研究了起来。片刻之后,胖子的脸上露出了笑容,随后写下了一条消息给瘦子进程发送了过去。却说这瘦子进程正在焦急等待消息中,收到老大的回信后,赶紧取出来看:

二弟,主人的手册中提到,可以使用共享内存进行进程间通信。我准备了几个内存页面,你将它们映射到你的进程地址空间中,咱们就能共享这一片内存,你写的数据我能立即看到,我写的你也能立即看到,虽然咱们各自读写的地址不同,但实际上是访问的同一片物理内存页面,比管道和消息队列效率高多了!

不过为了防止咱们一起读写发生冲突,需要配合信号量一起使用,用它来实现进程间同步。具体的使用方法如下:············盼速回!

瘦子进程看完,心中大喜!赶紧通过消息队列发了一封回信。随后,通过老大交代的方法开始操作起来,打开共享、映射挂载一气呵成。再接着,将数据一股脑儿写到了共享的内存页面中。大功告成之后,便退出了进程,按照计划准备撤退,却不见了胖子的踪迹,既无进程也无文件。“这家伙难道抛下我一个人跑了?”正想着,突然“嗡”的一声,瘦子的程序文件也没了。却看那文件目录之下,只留了一卷《Linux进程间通信手册》···

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 通信
    +关注

    关注

    18

    文章

    6314

    浏览量

    139537
  • Linux
    +关注

    关注

    88

    文章

    11627

    浏览量

    217888
  • 服务器
    +关注

    关注

    13

    文章

    10092

    浏览量

    90854
  • 内存
    +关注

    关注

    9

    文章

    3173

    浏览量

    76099

原文标题:就很突然,电脑里多出了一个文件......

文章出处:【微信号:sztonyu,微信公众号:深圳东裕光大】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Linux多线程对比单线程的优势

    ,而单线程则需要通过进程通信来实现。「上下文切换开销小」:线程的上下文切换比进程小,因为它们共享相同的地址空间。「提高响应性」:多线程可以使程序更加响应用户输入或其他事件,避免阻塞。
    发表于 12-01 06:11

    Linux进程通信(IPC)全解析:从管道到 Socket,一篇讲透

    在 Linux 世界里,进程并非孤立存在。无论是后台服务协作(如 Web 服务器与数据库)、命令行工具联动(如ps | grep),还是复杂应用的模块通信,都离不开 进程
    的头像 发表于 11-14 21:38 1.2w次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>进程</b><b class='flag-5'>间</b><b class='flag-5'>通信</b>(IPC)全解析:从管道到 Socket,一篇讲透

    【HZ-T536开发板免费体验】—— linux 进程创建

    Linux进程通信方式有这几种: 1。管道 2。信号量 3。消息队列 4。共享内存 在本帖子中,我会讲解fork(),exit()系统调用的实践。通过应用编程来实现系统调用。 1,进程
    发表于 09-01 20:49

    国产!全志T113-i 双核Cortex-A7@1.2GHz 工业开发板—ARM + DSP、RISC-V核通信开发案例

    本文档主要介绍T113-i处理器的ARM + DSP、RISC-V核通信开发案例,演示T113-i处理器ARM Cortex-A7与HiFi4 DSP核心、玄铁C906 RISC-V核心的核
    的头像 发表于 08-18 14:03 624次阅读
    国产!全志T113-i 双核Cortex-A7@1.2GHz 工业开发板—ARM + DSP、RISC-V核<b class='flag-5'>间</b><b class='flag-5'>通信</b>开发案例

    Linux常用命令大全

    Linux常用命令是指在Linux操作系统中广泛使用的命令工具,这些命令工具可以完成各种不同的任务,如管理文件和目录、操作进程、网络通信、软件安装等。
    的头像 发表于 05-03 18:08 1609次阅读

    Linux后台进程管理详解

    当我们在终端或控制台工作时,可能不希望由于运行一个作业而占住了屏幕,因为可能还有更重要的事情要做,比如阅读电子邮件。对于密集访问磁盘的进程,我们更希望它能够在每天的非负荷高峰时间段运行(例如凌晨)。为了使这些进程能够在后台运行,也就是说不在终端屏幕上运行,有几种选择方法可
    的头像 发表于 04-25 11:04 796次阅读
    <b class='flag-5'>Linux</b>后台<b class='flag-5'>进程</b>管理详解

    Linux系统进程管理入门指南

    Linux 系统中,进程是正在运行的程序的实例。理解进程的管理、查看和控制对于系统管理员和开发者来说非常重要
    的头像 发表于 04-22 14:34 852次阅读
    <b class='flag-5'>Linux</b>系统<b class='flag-5'>进程</b>管理入门指南

    Linux进程状态详解

    进程状态是task_struct内的一个整数;进行:进程在调度队列中,进程的状态都是running,阻塞:等待某种设备或者资源就绪。进程是一个队列,设备也是一个队列,当我们读磁盘,读网
    的头像 发表于 04-01 09:46 803次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>进程</b>状态详解

    STM32双核H7核如何通信

    STM32双核H7核通信的方法,主要是CM7和CM4之间如何进行数据传递
    发表于 03-12 07:34

    DLPC150和DMD2010NIR通信协议是什么?

    DLPC150和DMD 2010NIR通信协议是什么?传输的DATA和CLK如何控制每一个微镜单元的翻转呢?能不能提供一些资料呢?
    发表于 02-28 08:14

    分享!基于NXP i.MX 8M Plus平台的OpenAMP核通信方案

    在嵌入式系统领域,随着技术不断发展,对于系统性能和功能要求日益提高。核通信作为提升系统整体效能的关键技术,成为了关注焦点。今天,我们和大家分享一个OpenAMP非对称架构核通信方案
    的头像 发表于 02-27 10:44 869次阅读
    分享!基于NXP i.MX 8M Plus平台的OpenAMP核<b class='flag-5'>间</b><b class='flag-5'>通信</b>方案

    Linux计划任务cron详解

    cron是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务 工具,并且会自动启动crond进程,crond
    的头像 发表于 02-07 15:31 1525次阅读
    <b class='flag-5'>Linux</b>计划任务cron详解

    ARM + RISC-V核通信方案,基于全志T113-i的OpenAMP非对称架构

    本文主要给大家分享的是基于创龙科技TLT113-EVM评估板(基于全志T113-i)的ARM + RISC-V核通信开发案例,适用开发环境如下。 Windows开发环境:Windows 7
    的头像 发表于 01-24 09:30 886次阅读
    ARM + RISC-V核<b class='flag-5'>间</b><b class='flag-5'>通信</b>方案,基于全志T113-i的OpenAMP非对称架构

    深入解析Linux程序与进程

    什么是程序 一组计算机能识别和执行的指令,用于指导计算机执行特定任务或解决特定问题。程序通常由代码、数据和资源文件组成,涉及语法、算法和数据结构。为二进制文件 什么是进程 是一个具有独立功能的程序
    的头像 发表于 12-18 11:01 829次阅读
    深入解析<b class='flag-5'>Linux</b>程序与<b class='flag-5'>进程</b>

    Linux之CPU调度策略和CPU亲和性

    一、调度策略 调度进程 单个 CPU一次只能执行一个进程,虽然 Linux 系统通过使用多任务同时处理多个进程,但当多个进程同时运行在一个C
    的头像 发表于 12-05 16:38 1666次阅读
    <b class='flag-5'>Linux</b>之CPU调度策略和CPU亲和性