Linux 进程间通信概述
SystemV IPC
Linux 引入了 SystemV 中 IPC 的集中实现方式,包括:信号量、共享内存、消息队列。
共享内存
共享内存基于文件实现,用操作文件的方式来操作共享内存区。
原理是对一块物理内存做多个映射,用引用计数来维护,只有引用计数为0时,才能释放。
共享内存的特点是:
- 速度快,但自身没有同步功能,需要配合外部的同步机制。
信号量
为什么说信号量也是一种通信机制?
其实通信并不一定就是要发送数据,只要能够相互感知,通知到对方,就算是一种通信。 类比抛媚眼也算是通信的一种。
消息队列
- 并非基于文件,由自己的一套API,使用起来不方便。
- 消息队列是面向消息的(并非字节流),消息由类型。
- 消息队列有自己的同步机制,无需外部添加。
信号
常用于父子之间通信,只要你知道了对方的PID,就可以给对方发信号。
用kill(pid, signal)
来发送信号。