Linux进程间的通信方式

管道

管道是Linux支持的最草的IPC(进程间通信)方式,可以分为有名管道和无名管道

无名管道

1. 管道是半双工,只能支持单向流动,两个进程需要建立两个通道来进行通信

2. 无名管道通过pipe()函数创建,只能用于父子进程或者兄弟进程之间

3. 一个进程向管道中写数据,加入到管道缓冲区的尾部,另一个进程读的时候从缓冲区的头部读取

有名管道

有名管道也是半双工,但是它允许任何两个进程之间的通信,有名管道提供一个路径名与之进行关联,以FIFO的方式存在于文件系统中

信号量

提到信号量,就能想到P/V操作,也就是wait()和sinal()操作。信号量是一种计数器,可以控制进程间多个线程或者多个进程之间对共享资源的访问,实现为一种锁的机制。

信号

操作系统可以根据信号的不同来进行不同的处理方式,采用默认的处理方式,即进程中断或退出 ,也可以采用另一种机制,即忽略该信号,另外的就是自定义处理函数,执行相应的操作

消息队列

消息队列是一种链表的形式,允许一个或这多个进程来写数据,一个或多个进程进行读数据,

共享内存

共享内存映射为一段可以被其他进程访问的内存。该内存被一个进程所创建,然后其他进程可以挂载到该共享内存中。,共享内存是最快的进程间通信方式,但是不支持并发控制,所以通常配合信号量机制实现进程间的通信

socket

socket也是一种进程间的通信方式,但与其他方式不同的是该方式可以实现不同的主机之间的通信

猜你喜欢

转载自www.cnblogs.com/lgxblog/p/11570440.html