进程间的通讯方式
进程间通讯,即进程之间传播或者交换信息。在系统中,进程的用户空间都是相对独立的,一般来说不能相互访问,要实现进程之间的通信,总体上,有以下几种方式:
- 管道 ( pipe )
- 系统IPC ( 消息队列、信号、共享传输)
- 套接字 ( Socket )
管道
-
普通管道(pipe)
- 数据只能单向传输
- 只能在有亲缘关系的进程间使用
- 可以看作一种只存在于内存中的特殊的文件 允许通过普通的 write()、read() 等函数来读写 流管道 (s_pipe)
- 在普通管道的基础之上 允许双向传输 命名管道(name_pipe)
- 能在不相关进程间通讯 但是不能双向传输
- 以 FIFO 的方式存在于文件系统中
- 总是以 first in first out 的方式进行数据读取
系统IPC
-
信号
- 生命周期-生成与传送
- 信号到来到进程对信号处理之间 信号在进程上挂起
- 内核为进程生产信号来响应不同的事件 并用一个字来代表信号 每个信号占一位 因此一个字的位数就是系统可以支持的最多信号种类数
- 信号没有固定的优先级 消息队列 - 消息的链表
- 存放在内核中 并由消息队列标识符表示
- 克服了信号传递信息少
- 管道只能承载无格式字节流以及缓冲区大小受限等特点 共享内存 - 映射一段能被其他进程访问的内存
- 由一个进程创建
- 是最快的IPC通信方式 针对其他进程间通信方式运行效率低二设计 可与其他通信机制配合使用
套接字(Socket)
可用于不同进程及其间进程的通信