进程间的通信(IPC)方式

为何要进行进程间的通信IPC (Inter-process communication)linux


数据传输:一个进程须要将它的数据发送给另外一个进程,发送的数据量在一个字节到几M字节之间
ide

共享数据:多个进程想要操做共享数据,一个进程对共享数据的修改,别的进程应该马上看到。函数

通知事件:一个进程须要向另外一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。spa

资源共享:多个进程之间共享一样的资源。为了做到这一点,须要内核提供锁和同步机制。线程

进程控制:有些进程但愿彻底控制另外一个进程的执行(如Debug进程),此时控制进程但愿可以拦截另外一个进程的全部陷入和异常,并可以及时知道它的状态改变。设计


linux经常使用的进程间的通信方式接口


(1)管道(pipe):管道可用于具备亲缘关系的进程间的通讯,是一种半双工的方式,数据只能单向流动,容许一个进程和另外一个与它有共同祖先的进程之间进行通讯。队列


(2)命名管道(named pipe):命名管道克服了管道没有名字的限制,同时除了具备管道的功能外(也是半双工),它还容许无亲缘关系进程间的通讯。命名管道在文件系统中有对应的文件名。命名管道经过命令mkfifo或系统调用mkfifo来建立。进程


(3)信号(signal):信号是比较复杂的通讯方式,用于通知接收进程有某种事件发生了,除了进程间通讯外,进程还能够发送信号给进程自己;linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction(实际上,该函数是基于BSD的,BSD为了实现可靠信号机制,又可以统一对外接口,用sigaction函数从新实现了signal函数)。事件


(4)消息队列:消息队列是消息的连接表,包括Posix消息队列system V消息队列。有足够权限的进程能够向队列中添加消息,被赋予读权限的进程则能够读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺


(5)共享内存:使得多个进程能够访问同一块内存空间,是最快的可用IPC形式。是针对其余通讯机制运行效率较低而设计的。每每与其它通讯机制,如信号量结合使用,来达到进程间的同步及互斥。


(6)内存映射:内存映射容许任何多个进程间通讯,每个使用该机制的进程经过把一个共享的文件映射到本身的进程地址空间来实现它。


(7)信号量(semaphore):主要做为进程间以及同一进程不一样线程之间的同步手段。


(8)套接字(Socket):更为通常的进程间通讯机制,可用于不一样机器之间的进程间通讯。起初是由Unix系统的BSD分支开发出来的,但如今通常能够移植到其它类Unix系统上:Linux和System V的变种都支持套接字。

相关文章
相关标签/搜索