Linux进程间通信(IPC)有几种方式,下面将将简单的简述一下:

  一。管道(pipe)

  管道是Linux支持的最初IPC方式,管道可分为无名管道,有名管道等。

  (一)无名管道,它具有几个特点:

  1) 管道是半双工的,只能支持数据的单向流动;两进程间需要通信时需要建立起两个管道;

  2) 无名管道使用pipe()函数创建,只能用于父子进程或者兄弟进程之间;

  3) 管道对于通信的两端进程而言,实质上是一种独立的文件,只存在于内存中;

  4) 数据的读写操作:一个进程向管道中写数据,所写的数据添加在管道缓冲区的尾部;另一个进程在管道中缓冲区的头部读数据。

  (二)有名管道

  有名管道也是半双工的,不过它允许没有亲缘关系的进程间进行通信。具体点说就是,有名管道提供了一个路径名与之进行关联,以FIFO(先进先出)的形式存在于文件系统中。这样即使是不相干的进程也可以通过FIFO相互通信,只要他们能访问已经提供的路径。

  值得注意的是,只有在管道有读端时,往管道中写数据才有意义。否则,向管道写数据的进程会接收到内核发出来的SIGPIPE信号;应用程序可以自定义该信号处理函数,或者直接忽略该信号。

  二。信号量(semophore)

  信号量是一种计数器,可以控制进程间多个线程或者多个进程对资源的同步访问,它常实现为一种锁机制。实质上,信号量是一个被保护的变量,并且只能通过初始化和两个标准的原子操作(P/V)来访问。(P,V操作也常称为wait(s),signal(s))

  三。信号(Signal)

  信号是Unix系统中使用的最古老的进程间通信的方法之一。操作系统通过信号来通知某一进程发生了某一种预定好的事件;接收到信号的进程可以选择不同的方式处理该信号,一是可以采用默认处理机制—进程中断或退出,一是忽略该信号,还有就是自定义该信号的处理函数,执行相应的动作。

  内核为进程生产信号,来响应不同的事件,这些事件就是信号源。信号源可以是:异常,其他进程,终端的中断(Ctrl-C,Ctrl+\等),作业的控制(前台,后台进程的管理等),分配额问题(cpu超时或文件过大等),内核通知(例如I/O就绪等),报警(计时器)。

  四。消息队列(Message Queue)

  消息队列就是消息的一个链表,它允许一个或者多个进程向它写消息,一个或多个进程向它读消息。Linux维护了一个消息队列向量表:msgque,来表示系统中所有的消息队列。

  消息队列克服了信号传递信息少,管道只能支持无格式字节流和缓冲区受限的缺点。

  五。共享内存(shared memory)

  共享内存映射为一段可以被其他进程访问的内存。该共享内存由一个进程所创建,然后其他进程可以挂载到该共享内存中。共享内存是最快的IPC机制,但由于linux本身不能实现对其同步控制,需要用户程序进行并发访问控制,因此它一般结合了其他通信机制实现了进程间的通信,例如信号量。

  五。套接字(socket)

  socket也是一种进程间的通信机制,不过它与其他通信方式主要的区别是:它可以实现不同主机间的进程通信。一个套接口可以看做是进程间通信的端点(endpoint),每个套接口的名字是唯一的;其他进程可以访问,连接和进行数据通信。

Linux IPC通信方式相关推荐

  1. Linux 常见的六大 IPC 通信方式

    Linux环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间.任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能相互访问,要交换数据必须通过内核,在内核中开辟一块缓冲区, ...

  2. Unix/Linux IPC及线程间通信总结

    一.互斥与同步 1.互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性.但互斥无法限制访问者对资源的访问顺序,即访问是无序的. 2.同步:是指在互斥的基础上(大多数情况),通过其它 ...

  3. Linux IPC总结(全)

    原文链接 IPC进程间通信(Inter-Process Communication)就是指多个进程之间相互通信,交换信息的方法.Linux IPC基本上都是从Unix平台上继承而来的.主要包括最初的U ...

  4. Linux IPC进程间通信(三):信号量

    系列文章: Linux IPC进程间通信(一):管道 Linux IPC进程间通信(二):共享内存 Linux IPC进程间通信(三):信号量 Linux IPC进程间通信(四):消息队列 文章目录 ...

  5. Linux IPC shm

    Linux IPC Shm Linux 共享内存 Linux 不同进程之间可以通过共享内存的方式完成通信. Linux 使用共享内存 共享内存相关API shmget shmget - allocat ...

  6. linux命名管道通信方式图例,linux IPC 命名管道

    在前面一篇文章中[Linux进程间通信] - 匿名管道中,我们介绍了Linux/Unix系统中最古老的一种进程间通信方式 – 匿名管道.此外,我们也讲解了匿名管道的几个局限性,特别是匿名管道只能用于父 ...

  7. 【编撰】linux IPC 001 - 概述

    前言:本文摘自IBM DeveloperWorks ,by郑彦兴 (mlinux@163.com)国防科大计算机学院 文章大致说明了UNIX,linux的IPC的历史发展和分类.大致说明了IPC的六种 ...

  8. Linux IPC实践(8) --共享内存/内存映射

    概述 共享内存区是最快的IPC形式.一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据(如图). 共享内存 VS ...

  9. UNIX再学习 -- XSI IPC通信方式

    有 3 种称作 XSI IPC 的IPC:消息队列.信号量以及共享存储器.我们先来介绍它们相类似的特征: 一.相似特征 1.标识符和键 每个内核中的 IPC 结构(消息队列.信号量和共享存储器)都用一 ...

最新文章

  1. Educational Codeforces Round 87 (Rated for Div. 2)C2. Not So Simple Polygon Embedding【几何题】
  2. Silverlight DataGrid超出列表高度时自动滚屏
  3. 大数据助力智慧城市建设
  4. 全面讲解Python字典;--什么是字典?字典的常用方法;创建空字典并赋值,增删改查字典中的元素
  5. 百度步行导航加poi搜索android,【百度地图】带地图显示控件、导航控件、POI查找控件...
  6. Rube GoldbergSpring整合
  7. CGContext转CC
  8. 1051. 复数乘法 (15)
  9. 认知空间是什么意思_Number是“数”,one是“一”,那么number one什么意思?
  10. SIFT算法详解(附有完整代码)
  11. 0元参会丨第十届数据技术嘉年华精彩抢先速览
  12. 荣耀20手机不升级鸿蒙经验
  13. Unity适配IOS刘海屏
  14. 视觉SLAM--直接法
  15. 2021年目标,我打算这样去实现
  16. php自动生成网站地图txt,织梦网站地图生成插件+发布文章后自动生成地图
  17. linux3.4.0 按键驱动程序分析(pandaboard omap4460)
  18. Linux九阴真经之九阴白骨爪残卷4(cobbler)
  19. 云计算应用越来越广泛,云计算用户需要注意的主要趋势有哪些?
  20. 英文地址怎么写?!!

热门文章

  1. 工业人工智能与机器学习_机器学习与第四次工业革命
  2. 从信息学奥赛获奖年级分布看信息学奥赛最佳学习线路
  3. 光伏数据采集分析系统
  4. 详解ISO13400文档-3
  5. monkeyrunner +python 多台真机 多线程
  6. 服务器无盘网卡设置,安装无盘时各种网卡最佳设置
  7. Python采集最热影评 + 制作词云图
  8. 通过对象实现圆柱体体积计算
  9. 目标检测之Loss:Center Loss梯度更新
  10. 罗斯蒙特导波雷达液位计设置_Rosemount/罗斯蒙特5300导波雷达液位计的优势!