无名管道 PIPE
特殊的文件存在于内核缓存,不存在于文件系统
仅限亲缘关系进程(父子,兄弟)
生命周期随进程
半双工,固定读端与写端,数据单向流动
无格式字节流
有名管道 FIFO
设备文件存在于文件系统,Linux下类型为p
可以无关进程通信
全双工
无格式字节流
共享内存 Shared Memory
最快的IPC方式
不同虚拟地址空间映射到同一物理内存
需要信号量来同步
消息队列 Message Queue
消息链表存在于内核中
有特定格式与优先级
有队列最大长度和消息最大长度的限制
消息拷贝需要内核/用户态的转换
信号量 Semaphores
不直接传递通信信息
用来实现同步/互斥
信号 Signals
IPC中唯一的异步处理方式,发生在进程调度时内核态到用户态到上下文切换中
处理方式
- 捕获
- 执行默认操作
- 忽略(有两个不能忽略)
分为
信号的可靠与不可靠只与信号值有关
- 不可靠信号(响应设置为默认动作,信号可能丢失)
- 可靠信号
来源
- 软件
- 硬件