linux进程通信

来源:岁月联盟 编辑:exp 时间:2011-09-19

 linux 进程通信基本是从Unix继承过来的,而对这贡献大的两大机构是AT&T和bsd两大机构在进程方面的侧重点不同,前者则是是侧重于早期进程间通信的扩充,形成了"System v IPC ",通信进程局限于单个计算机内,而后者则是跳过了该限制,形成了基于套接口的进程间通信,Linux则是继承了两大方面。
    Linux通信方式有如下几种方式:
   1.管道及有名管道:管道可用于具有亲缘关系之间的进程进行通信,有名管道客服了管道没有名字的限制,因此,除了具有管道的特性外,它还允许无亲缘关系的进程间进行通信
   2.信号。信号是比较复杂的通信方式,用于通知进程有某种事情发生,除了通知进程间以外,还可以通知本身,linux除了支持signal外,还支持基于bsd的sigaction函数,该函数可以重新实现signal函数
   3.消息队列。消息队列是消息的链接表,包括Posix的System V消息队列,有足够权限的进程可以向队列中添加信息,被赋予读写权限的进程可以从队列中取走消息,消息队列克服了信号承载信息比较少的缺点,管道只能承载无格式字节流以及缓冲区受限的的不足
   4.共享内存。使得多个进程可以访问同一个内存区域,是最快的可用的IPC形式,一般与信号量结合使用,以达到进程间的同步与互斥
   5.信号量。主要作为不同进程以及同一进程不同线程间的同步使用
   6.套接口。更为一般的进程间通信。可用于不同机器间的进程通信。
一般Linux进程包括以下几个要素
   1.含有一段可运行的代码
   2.有专有的系统堆栈空间
   3.内核中有系统控制块,描述系统的状态,时间,受内核可控制
   4.具有独立的存储空间
进程往往和线程没有直接区分,而往往根据上下文进行分析。

作者“舞者博客”