1,进程间通信(InterProcess Communication, IPC)
下图列出不同形式的IPC:
2,管道
管道是UNIX系统IPC的最古老形式,管道有以下两个局限性:
(1)半双工(数据只能在一个方向流动)
(2)管道只能在具有公共祖先的两个进程之间使用。通常,一个管道有一个进程创建,在进程调用fork之后,这个管道就能在父进程和子进程之间使用了。
3,协同进程
UNIX系统过滤程序从标准输入读取数据,向标准输出写数据,几个过滤程序通常在shell管道中线性连接。当一个过滤程序既产生某个过滤程序的输入,又读取该过滤程序的输出时,它就变成了协同进程(coprecess)。
4,FIFO
FIFO被称为命名管道,未命名管道只能在两个相关的进程之间使用,而且这两个相关进程还要有一个共同的创建了它们的祖先进程。但是,通过FIFO不相关的进程也能交换数据。
FIFO有两种用途:
1,shell命令使用FIFO将数据从一条管道传送到另一条时,无需创建中间临时文件;
2,客户进程-服务器进程应用程序中,FIFO用作汇聚点,在客户进程和服务器进程二者之间传递数据。
5,XSI IPC
3种称作XSI IPC的IPC:消息队列、信号量以及共享存储器。
6,消息队列
消息队列是消息的链接表,存储在内核中,由消息队列标识符标识。
msgget用于创建一个新队列或者打开一个现有队列,msgssnd将新消息添加到队列尾端,msgrcv用于从队列中取消息。
7,信号量
信号量与已经介绍的IPC机构(管道、FIFO以及消息队列)不同,它是一个计数器,用于为多个进程提供对共享数据对象的访问。
8,共享存储
共享存储允许两个或多个进程共享一个给定的存储区。因为数据不需要在客户进程和服务器进程之间复制,所以这是最快的一种IPC。使用共享存储时要掌握的唯一窍门是在多个进程之间同步访问一个给定的存储区。若服务区进程正在将数据放入共享存储区,则在它做完这一操作之前,客户进程不应该去取这些数据。