前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【Linux进程通信】一、进程间通信的概念

【Linux进程通信】一、进程间通信的概念

作者头像
利刃大大
发布2025-03-13 08:10:24
发布2025-03-13 08:10:24
1040
举报
文章被收录于专栏:csdn文章搬运csdn文章搬运

Ⅰ. 前言

​ 之前我们学习了进程以及基础IO的相关知识,所以进程之间我们知道都是具有独立性的(通过写时拷贝和虚拟地址空间),那么如果我们今天想让不同的进程之间进行资源的交互,也就是说进程A想看到进程B发过来的信息并及时接收它,那么我们仔细想想这不就是和进程的独立性相违背了吗 ❓❓❓

​ 因为我们之前说,如果打开一个文件,并且父进程创建了子进程,那么子进程其实就会拷贝父进程的大部分属性和内容,包括文件描述符表等,也就是说如果父进程指向了一个打开的文件,那么子进程也是会指向那个打开的文件。此时如果某一端进行写入的话,那不就会触发写时拷贝吗,那么两个进程之间不就看不到所谓的资源交互了吗 ❓❓❓

​ 所以对我们来说,进程之间的通信的成本肯定是不低的,因为我们必须打破它独立性的原则!

​ 下面我们就得先知道什么是通信,为什么要有通信以及如何通信的概念!

Ⅱ. 什么要有通信

​ 要知道我们日常生活中设计出来的程序不可能一直在本地中的单个程序做自己的事情,大部分时间程序之间或者说进程之间必须要有信息资源的交互才能使得设计逻辑成立,所以通信就是为了让程序或者进程之间搭建起一条桥梁,让它们可以共享某段资源并且进行交互!有时候我们需要多进程协同的,完成某种业务内容。比如管道。所以一共有以下几个目的:

  • 数据传输:一个进程需要将它的数据发送给另一个进程
  • 资源共享:多个进程之间共享同样的资源。
  • 通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。
  • 进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程也就是gdb),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。

Ⅲ. 什么是进程间通信

进程间通信的本质OS 需要直接或者间接给通信双方的进程提供一段特殊的 “内存空间”,并且必须让通信的进程看到一份公共的资源。

​ 而我们所说的不同通信种类本质就是:这段特殊的 “内存空间” 是 OS 中的哪一个模块提供的就是哪种通信。如文件系统提供的叫管道通信;OS 对应的 System V 模块提供的就是 System V 通信,如果是共享内存,就是共享内存通信等等

Ⅲ. 怎么进行通信的

​ 通信其实也就是分为两大步,第一步就是我们要让不同的进程之间看到同一份资源第二步则是通信

​ 上面所说的第二步一定是基于第一步的,而我们接下来学习的内容主要是围绕第一步来展开的,也就是如何让进程间看到同一份资源,以下就是几种常见的通信手段:

  • 管道(基于文件系统)
    • 匿名管道
    • 命名管道
  • System V IPC(聚焦在本地通信,比较老旧了,常见如共享内存)
    • System V 消息队列
    • System V 共享内存
    • System V 信号量
  • POSIX IPC(让通信过程可以跨主机)
    • 消息队列
    • 共享内存
    • 信号量
    • 互斥量
    • 条件变量
    • 读写锁

​ 接下来我们会先介绍到管道的内容,让我们对通信的概念打下基础,接着会稍微接触点 System V 通信,因为其现在不是主流,并且只能在本地通信使得局限性很大,所以我们对 System V 不会花太多时间,最后会将重点放到 POSIX 通信手段上!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-03-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Ⅰ. 前言
  • Ⅱ. 什么要有通信
  • Ⅲ. 什么是进程间通信
  • Ⅲ. 怎么进行通信的
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档