同一主机下进程间的通信方式
进程间通信方式一共六种:
无名管道,有名管道,信号,消息队列,共享内存,信号量。
接下来,咱们一一理解下!
进程间通信的目的:
数据传输:一个进程需要将它的数据发送给另一个进程;
资源共享:多个进程之间共享同样的资源;
通知事件:一个进程需要向另一个进程发送消息,通知其发生了某种事情(比如进程终止父进程告诉子进程);
进程控制:有些进程希望完全控制另一个进程的执行,此时控制进程希望能够拦截另一个进程的所有陷入和异常,能够及时知道它的状态改变。
一、继承了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.由于多个进程共享一段内存,因此也需要依靠某种同步机制,如互斥锁和信号量等。
信号量
信号量不能传送数据,一般和共享内存配合使用,实现共享内存同步。
同一主机下进程间的通信方式相关推荐
- step4 . day7 进程间的通信方式
进程间的通信方式: 无名管道(pipe) 有名管道 (fifo) 信号(signal) system v5的进程间通信方式 共享内存(share memory) 消息队列(message queue) ...
- msgget();msgsnd();msgrcv();msgctl(); 消息队列 Linux进程间的通信方式之消息队列
Linux进程间的通信方式 ----消息队列. 消息队列和共享内存类似 消息队列它允许一个或多个进程向它写消息,一个或多个进程向它写读消息. 消息队列存在于系统内核中,消息的数量受系统限制. 我们来看 ...
- unix进程间的通信方式
unix进程间的通信方式 (1)管道(Pipe):管道可用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先的进程之间进行通信. (2)命名管道(named pipe):命名管道克服了管道 ...
- 1、几种进程间的通信方式
1.几种进程间的通信方式 # 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用.进程的亲缘关系通常是指父子进程关系. # 有名管道 (named ...
- 共享内存(进程间的通信方式)
目录 1.共享内存的特点 2.函数接口 3.有关共享内存的系统命令 1.共享内存的特点 (1)共享内存是一种最高效的进程间的通信方式,进程可以直接读写内存,而进程之间不需要通过任何数据的拷贝. (2) ...
- Windows进程间各种通信方式浅谈(转)
转自 https://blog.csdn.net/microzone/article/details/7044266 权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原 ...
- Linux 进程 | 进程间的通信方式
文章目录 管道 匿名管道 pipe 命名管道 FIFO 共享内存 共享内存的使用流程: 消息队列 信号量 套接字 在之前的博客中讲过,虚拟空间出现的其中一个目的就是解决 进程没有独立性,可能访问同一块 ...
- 进程间的通信方式(1)
程序员必须让拥有依赖关系的进程集协调,这样才能达到进程的共同目标.可以使用两种技术来达到协调.第一种技术在具有通信依赖关系的两个进程间传递信息.这种技术称做进程间通信(interprocess com ...
- 进程间的通信方式(管道,消息队列,共享内存,信号)
目录 了解 使用管道来通信 无名管道 有名管道 消息队列 key 键值生成 共享内存 信号 信号概述 信号如何携带消息 信号发送函数: 信号量 了解 创建进程后实现父子通讯的连接. 我们希望有一个管道 ...
最新文章
- 微信小程序获取openid和session_key并且把openid存入数据库
- 说实话,Intellij IDEA 自带的 Vim 插件真心不错!
- 025 资源的隔离与配置
- github和dockerhub制作k8s镜像
- c/c++永不过时的编程语言
- Spring Boot提交表单信息
- 刚毕业,师傅推荐的书单
- 嵌入式gdbserver远程调试【原创】
- 【maven】配置ali镜像
- 7.上传自己的代码到 composer
- k-d Tree及其Java实现
- 【阅读笔记】Implementation of tactical maneuvers with maneuver libraries
- 万用表怎么测量电池容量_万用表怎么测量12v电瓶(用万用表测电瓶电量怎么测?)...
- windows立方体桌面
- Lecture 005-Duality theory
- 启动cesium官方示例
- unity中单位是米还是厘米_Unity3D 单位
- 开发者工具 箱 编程工具 dns加速器 LingMax https抓包改包劫持
- 矩阵/向量/标量间相互求导
- Vue、elmentUI国际化 vue-i18n项目实行简繁体切换