进程间通信方式一共六种:

无名管道,有名管道,信号,消息队列,共享内存,信号量。

接下来,咱们一一理解下!

进程间通信的目的:

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

一、继承了Unix传统的通信方式

1.无名管道

1.只能用于具有亲缘关系(父子进程/兄弟进程)的进程之间的通信,速度慢,容量有限;

2.半双工的通信方式,具有固定的读端fd[0]和写端fd[1];

3.管道可以看成一种特殊的文件,对于它的读写我们实用文件IO中read和write。

2.有名管道

1.有名管道是对无名管道的改进,它可以使互不相关的两个进程互相通信,并且在文件系统中可见,可以通过文件名来找到;

2.半双工的通信方式,进程通过文件IO来操作有名管道;

3.有名管道遵循先进先出原则,不支持lseek()。

3.信号

信号是一种异步通信方式。

信号产生的方式:

1.硬件产生(组合键)信号

ctrl+c  SIGINT

ctrl+z  SIGTSTP

ctrl+\  SIGQUIT

2.内核发送信号

alarm()也称为闹钟函数,它可以在进程中设置一个定时器。当定时器指定的时间到时,内核就向进程发送SIGALRM信号;

pause()函数是用于将调用进程挂起直到收到信号为止。

3.软件方式产生信号

raise()  自己给自己发送信号;

kill()    给别人发送信号。

二、systemV进程间通信方式

消息队列

1.消息队列由消息队列ID来唯一标识;

2.消息队列就是一个消息的列表。用户可以在消息队列中添加消息、读取消息等;

3.消息队列可以按照类型来发送/接收消息,相同类型先入先出,不同类型随意存取;

4.全双工的一个通信方式。

共享内存

1.共享内存是一种最为高效的进程间通信方式,进程可以直接读写内存,而不需要任何数据的拷贝;

2.为了在多个进程间交换信息,内核专门留出了一块内存区,可以由需要访问的进程将其映射到自己的私有地址空间;

3.进程就可以直接读写这一内存区而不需要进行数据的拷贝,从而大大提高的效率;

4.由于多个进程共享一段内存,因此也需要依靠某种同步机制,如互斥锁和信号量等。

信号量

信号量不能传送数据,一般和共享内存配合使用,实现共享内存同步。

同一主机下进程间的通信方式相关推荐

  1. step4 . day7 进程间的通信方式

    进程间的通信方式: 无名管道(pipe) 有名管道 (fifo) 信号(signal) system v5的进程间通信方式 共享内存(share memory) 消息队列(message queue) ...

  2. msgget();msgsnd();msgrcv();msgctl(); 消息队列 Linux进程间的通信方式之消息队列

    Linux进程间的通信方式 ----消息队列. 消息队列和共享内存类似 消息队列它允许一个或多个进程向它写消息,一个或多个进程向它写读消息. 消息队列存在于系统内核中,消息的数量受系统限制. 我们来看 ...

  3. unix进程间的通信方式

    unix进程间的通信方式 (1)管道(Pipe):管道可用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先的进程之间进行通信. (2)命名管道(named pipe):命名管道克服了管道 ...

  4. 1、几种进程间的通信方式

    1.几种进程间的通信方式 # 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用.进程的亲缘关系通常是指父子进程关系. # 有名管道 (named ...

  5. 共享内存(进程间的通信方式)

    目录 1.共享内存的特点 2.函数接口 3.有关共享内存的系统命令 1.共享内存的特点 (1)共享内存是一种最高效的进程间的通信方式,进程可以直接读写内存,而进程之间不需要通过任何数据的拷贝. (2) ...

  6. Windows进程间各种通信方式浅谈(转)

    转自 https://blog.csdn.net/microzone/article/details/7044266 权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原 ...

  7. Linux 进程 | 进程间的通信方式

    文章目录 管道 匿名管道 pipe 命名管道 FIFO 共享内存 共享内存的使用流程: 消息队列 信号量 套接字 在之前的博客中讲过,虚拟空间出现的其中一个目的就是解决 进程没有独立性,可能访问同一块 ...

  8. 进程间的通信方式(1)

    程序员必须让拥有依赖关系的进程集协调,这样才能达到进程的共同目标.可以使用两种技术来达到协调.第一种技术在具有通信依赖关系的两个进程间传递信息.这种技术称做进程间通信(interprocess com ...

  9. 进程间的通信方式(管道,消息队列,共享内存,信号)

    目录 了解 使用管道来通信 无名管道 有名管道 消息队列 key 键值生成 共享内存 信号 信号概述 信号如何携带消息 信号发送函数: 信号量 了解 创建进程后实现父子通讯的连接. 我们希望有一个管道 ...

最新文章

  1. 微信小程序获取openid和session_key并且把openid存入数据库
  2. 说实话,Intellij IDEA 自带的 Vim 插件真心不错!
  3. 025 资源的隔离与配置
  4. github和dockerhub制作k8s镜像
  5. c/c++永不过时的编程语言
  6. Spring Boot提交表单信息
  7. 刚毕业,师傅推荐的书单
  8. 嵌入式gdbserver远程调试【原创】
  9. 【maven】配置ali镜像
  10. 7.上传自己的代码到 composer
  11. k-d Tree及其Java实现
  12. 【阅读笔记】Implementation of tactical maneuvers with maneuver libraries
  13. 万用表怎么测量电池容量_万用表怎么测量12v电瓶(用万用表测电瓶电量怎么测?)...
  14. windows立方体桌面
  15. Lecture 005-Duality theory
  16. 启动cesium官方示例
  17. unity中单位是米还是厘米_Unity3D 单位
  18. 开发者工具 箱 编程工具 dns加速器 LingMax https抓包改包劫持
  19. 矩阵/向量/标量间相互求导
  20. Vue、elmentUI国际化 vue-i18n项目实行简繁体切换

热门文章

  1. Cluster04 - Ceph概述 部署Ceph集群 Ceph块存储
  2. 初级入门——认识Python语言
  3. 【软件测试】——编写测试用例实例
  4. 显示器 如何切换输入源
  5. 关于Android写入文件失败的问题
  6. 如何做好IT战略规划与IT咨询!
  7. SDB光猫虚拟服务器,折腾光猫/路由器[MIPS架构](1):用Samba服务器搭建家庭文件共享中心...
  8. 雷观(五):认准的事情,要做就做到极致
  9. MATLAB中未定义函数或变量”的问题
  10. c语言中signal函数详细解释说明