linux进程间通信简介
进程是一个独立的资源分配单位,不同进程之间的资源是相互独立的,没有关联,不能在一个进程中直接访问另一个进程中的资源。但是,进程不是孤立的,不同的进程之间需要信息的交换以及状态的传递,因此需要进程间数据传递、同步与异步的机制。
这些机制并不是由哪些进程来进行直接管理,而是由操作系统进行管理。linux中提供了大量的进程间通信机制来实现同一个主机间的进程间的通信。同时,对于网络间的主机进行通信的机制,linux也同时提供。看下面的图
一、总体简介
【1】同主机进程间数据交互机制:无名管道(PIPE),有名管道(FIFO),消息队列(message queue)和共享内存(share memory)。
【2】同主机进程间同步机制:信号量(semaphore)
【3】同主机进程间异步机制:信号(signal)
【4】网络主机间数据交互机制:套接字(socket)
二、unix进程间通信机制
1、无名管道PIPE,只能用于具有亲缘关系(父子进程)间的通信,无名管道在通信双方退出后自动消失。
2、有名管道:克服了无名管道的瞬时性的问题,采用管道文件来实现同一主机间的任意两个进程间的数据的传递。
3、信号:信号其实是一种软中断机制,采用一种异步的机制,在信号发生时处理特定的时间,但是要注意的是,这同硬件中的中断,还是有一定区别的。
三、system Ⅴ进程间通信
1、消息队列:消息队列主要用来实现两个进程间少量的数据的通信,并且接收方可以根据消息的类型,选择接收消息。http://blog.csdn.net/ssdsafsdsd/article/details/8192143
2、信号量:信号量是一种进程间的同步进制。对于二元信号量,可以实现两个进程间的同步,对于广泛的信号量,可以表示资源的使用量。
http://blog.csdn.net/ssdsafsdsd/article/details/8204997
3、共享内存:共享内存进制可以实现两个进程间的大数据量的通信,其在内存中专门开辟出一个独立的内存,然后映射到各自的进程之中,进行数据的传输,其通信效率较高。
http://blog.csdn.net/ssdsafsdsd/article/details/8205016
对于system Ⅴ进程间的通信机制,可以使用ipcs命令进程查看,如下
四、不同主机之间的网络通信
这部分主要是网络编程的知识,也就是linux网络socket编程,在这里不做重点的介绍。但是同样给出关于socket编程的本博客中出现的代码的几个链接。
2、使用AF_INET实现UDP点对点通信示例(UDP协议)
五、对于各种通信机制的实例
在本blog中,没有对各种通信机制进行详细的讲解,读者想学习可以去找本书,基本讲linux编程的书籍都会讲这个,但是对于每种的通信机制我几乎都写了文章,主要以实例的形式进行出现。在看完基础内容后,把这个例子看懂,会有一定收获。对于已经整理好的内容,我会把链接写在上面的分类后面,对于还没时间整理或者写的部分,没有给出链接,可以在我的文章里面找下。整理好后,我会把链接加上去。例如,对于进程间信号量的学习,我给出了一个使用信号量的例子来实现生产者,消费者问题。这些例子有的来自我所看的书中,也有些我我修改后的,或者自己写的。
OVER!!!!!!!!!!