UNIX为进程间的通信和同步提供了各种机制。最重要的几种:
- 管道
- 消息
- 共享内存
- 信号量
- 信号
管道、消息和共享内存提供了进程间传递数据的方法,而信号量和信号则用于触发其他进程的行为。
管道
管道是一个环形缓冲区,允许两个进程以生产者/消费者的模型进行通信。因此,这是一个先进先出队列,由一个进程写,而由另一个进程读。
管道创建时获得一个固定大小的字节数。当一个进程试图往管道中写时,如果有足够的空间,则写请求被立即执行;否则该进程被阻塞。读请求同理。操作系统强制实施互斥,即一次只能由一个进程可以访问管道。
消息
消息是有类型的一段文本。UNIX为参与消息传递的进程提供msgsnd和msgrcv系统调用。
共享内存
共享内存是UNIX提供的进程间通信手段中速度最快的一种。这是虚存中由多个进程共享的一个公共内存块。进程读写共享内存所使用的机器指令与读写虚拟内存空间的其他部分所使用的指令相同。每个进程有一个只读或读写的权限。
信号
信号是用于向一个进程通知发生异步事件的机制。信号类似于硬件中断,但没有优先级,即内核平等地对待所有的信号。对于同时发生的信号,一次只给进程一个信号,而没有特定的次序。
信号的传递是通过修改信号要发送到的进程所对应的进程表中的一个域来完成的。进程可以通过执行某些默认行为(如终止进程)、执行一个信号处理函数或者忽略该信号来对信号做出响应。