Linux进程间通信方式

Linux下进程间通信有以下几种方式:

1)管道(Pipe)和有名管道(FIFO)

    管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,除了具有管道所具有的功能外,还允许无亲缘关系进程间的通信。

2)信号(signal)

    用于通知接收进程有某种事件发生,除了用于进程间通信,还可以发送信号给进程本身。信号是在软件层次上对中断机制的一种模拟,是一种异步通信方式。信号可以直接进行用户空间进程之间的交互,内核进程也可以利用它来通知用户空间进程发生了哪些系统事件,可以在任何时候发给某个进程,而无需知道该进程的状态。如果该进程当前未处于执行状态,则该信号就由内核保存起来,直到该进程恢复执行再传递给它;如果一个信号被进程设置为堵塞,则该信号的传递被延迟,直到其堵塞被取消时才传递给进程。

3)消息队列

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

4)内存共享

    可以称之为最有用的进程间通信方式,也是最快的IPC形式。两个不同进程共享内存,即同一块物理内存被映射到两个进程各自的进程地址空间。进程间可以及时看到对方进程对共享内存中数据的更新。但是由于多个进程共享同一块内存区域,必然需要某种同步机制,互斥锁和信号量都可以。采用共享内存通信明显的好处就是效率高,因为进程可以直接读写内存,而不需要任何数据的复制。

5)信号量

     主要作为进程间,以及同一个进程不同线程之间的同步手段。用来解决进程间的同步与互斥问题的一种进程之间通信机制,包括一个称为信号量的变量和在该信号量下等待资源的进程等待队列,以及对信号量进行的两个原子操作。其中信号量对应于某一种资源,取一个非负的整型值。信号量的值是指当前可用的资源数量,若它等于0则意味着目前没有可用的资源。

6)套接字(socket)

    更为一般的进程间通信机制,可用于不同机器之间的进程间通信。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值