linux 进程通信

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.具有独立的存储空间

进程往往和线程没有直接区分,而往往根据上下文进行分析。

本文摘自网络网络安全攻防研究室(www.91ri.org) 信息安全小组收集整理.