现在最常用的进程间通信的方式有信号、信息量、消息队列、共享内存等。
百度经验有介绍8种 无名管道(pipe),高级管道(popen)、有名管道(nemed pipe)、消息队列(message queue)、信号量(semophore)、信号(sinal)、共享内存(shared memory)、套接字(socket)。
--》管道、有名管道
管道是单向的,先进先出,提供了简单的流控制,进程读空管道或者写满管道,都将造成进程阻塞
管道包括无名管道和有名管道,前者用于父子间进程通信,后者用于任意两个进程间通信
--》信号
信号产生的条件:按键、硬件异常、进程调用kill函数将信号发送给另一个进程、用户调用kill命令将信号发送给其他进程,传递的消息比较少,主要是通知消息
--》消息队列
一个消息链表,可以把消息看作一个记录,具有特定的格式,进程可以向队列中添加消息或者读走消息,有缓冲区
--》共享内存
共享内存就是映射一段可以被其他进程访问的内存,这段共享物理内存由一个进程创建,但是多个进程都可以访问,共享内存是进程间共享数据的一种最快的方法
--》信号量
主要用于保护临界资源,进程可以根据它来判断是否能够访问某些公共资源,除了用于反复问控制外,还可以用于进程同步,相当于计数器
--》套接字
可以用于不同进程间的通信。
流式套接字:提供可靠的,面向连接的通讯流
数据包套接字:定义一种无连接的服务,通过相互独立的报文进行传输,是无序的
原始套接字:用于新的网络协议的测试