进程间通信:传统上该术语描述的是运行在某个操作系统之上的不同进程名间的各种消息传递的方式。
进程间通信的目的:
数据传输
一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M字节之间
共享数据
多个进程想要操作共享数据,一个进程对共享数据
通知事
一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。
资源共享
多个进程之间共享同样的资源。为了作到这一点,需要内核提供锁和同步机制。
进程控制
有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。
Unix系统过去30年消息传递经历了以下几个阶段:
1.管道:其中匿名管道原先只能在具有共同祖先的进程间使用,随着有名管道的出现,可以跳出此限制
2.System V消息队列
3.Posix消息队列
4.远程过程调用(另一种消息传递机制)
linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来的。而对Unix发展做出重大贡献的两大主力AT&T的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间通信方面的侧重点有所不同。
前者(AT&T)对Unix早期的进程间通信手段进行了系统的改进和扩充,形成了“system V IPC”,通信进程局限在单个计算机内;
后者(BSD)则跳过了该限制,形成了基于套接口(socket)的进程间通信机制。
Linux则把两者继承了下来,遵循POSIX通信机制和标准(IEEE制定的标准)。
ps:由于Unix版本的多样性,电子电气工程协会(IEEE)开发了一个独立的Unix标准,这个新的ANSI Unix标准被称为计算机环境的可移植性操作系统界面(PSOIX)。现有大部分Unix和流行版本都是遵循POSIX标准的,而Linux从一开始就遵循POSIX标准
早期UNIX进程间通信方式包括:管道、FIFO、信号。
System V进程间通信方式包括:System V消息队列、System V信号灯、System V共享内存
POSIX进程间通信包括:posix消息队列、posix信号灯、posix共享内存。
Linux 进程间通信的几种方式:
1.管道(pipe),流管道(s_pipe)和有名管道(FIFO)
2.信号(signal)
3.消息队列
4.共享内存
5.信号量
6.套接字(socket)
下一篇,将简要分析几种IPC的优劣。