进程间的通讯(IPC)方式

为什么要进行进程间的通讯(IPC (Inter-process communication))

数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M字节之间
共享数据:多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到。
通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。
资源共享:多个进程之间共享同样的资源。为了作到这一点,需要内核提供锁和同步机制。
进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。

linux常用的进程间的通讯方式

(1)、管道(pipe):管道可用于具有亲缘关系的进程间的通信,是一种半双工的方式,数据只能单向流动,允许一个进程和另一个与它有共同祖先的进程之间进行通信。

(2)、命名管道(named pipe):命名管道克服了管道没有名字的限制,同时除了具有管道的功能外(也是半双工),它还允许无亲缘关系进程间的通信。命名管道在文件系统中有对应的文件名。命名管道通过命令mkfifo或系统调用mkfifo来创建。

(3)、信号(signal):信号是比较复杂的通信方式,用于通知接收进程有某种事件发生了,除了进程间通信外,进程还可以发送信号给进程本身;linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction(实际上,该函数是基于BSD的,BSD为了实现可靠信号机制,又能够统一对外接口,用sigaction函数重新实现了signal函数)。

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

(5)、共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。

(6)、内存映射:内存映射允许任何多个进程间通信,每一个使用该机制的进程通过把一个共享的文件映射到自己的进程地址空间来实现它。

(7)、信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。

(8)、套接字(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由Unix系统的BSD分支开发出来的,但现在一般可以移植到其它类Unix系统上:Linux和System V的变种都支持套接字。

时间: 2024-10-13 11:18:28

进程间的通讯(IPC)方式的相关文章

进程间的通讯

进程间通讯机制总结             2013-02-01 17:25:57 分类: LINUX 进程在内核的协调下进行相互间的通讯,主要包括三种方式:信号.管道和套接口三大类. 信号 信号是Unix 系统中的最古老的进程间通讯方式.它们用来向一个或多个进程发送异步事件信号.信号可以从键盘中断中产生,另外进程对虚拟内存的非法存取等系统错误环境下也会有信号产生.信号还被shell 程序用来向其子进程发送任务控制命令. 系统中有一组被详细定义的信号类型,这些信号可以由核心或者系统中其它具有适当

进程和线程的关系及区别,进程间如何通讯,线程间如何通讯

1 定义 进程:进程是程序处理机上的一次执行过程, 它是一个动态的概念,它是系统进行资源分配和调度的一个独立单位. 线程:进程的一个实体,是CPU运行调度的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源. 2 关系 一个线程可以创建和撤销另一个线程:同一个进程中的多个线程之间可以并发执行: 相对进程而言,线程是一个更加接近于执行体的概念,它可

进程间通讯IPC的几种方式的优缺点总结

Linux进程间的通讯 Unix发展做出重大贡献的两大主力AT&T的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间通信方面的侧重点有所不同.前者对Unix早期的进程间通信手段进行了系统的改进和扩充,形成了"system V IPC",通信进程局限在单个计算机内:后者则跳过了该限制,形成了基于套接口(socket)的进程间通信机制.Linux则把两者继承了下来,如图示: 管道 管道的通信介质是文件,这种文件通常称为管道文件,两个进程利用管道文件进行通信时,一

Android AIDL 进行进程间通讯(IPC)

编写AIDL文件时,需要注意: 1.接口名和aidl文件名相同. 2.接口和方法前不用加访问权限修饰符 (public.private.protected等,也不能用final.static). 3.AIDL默认支持的类型包括java基本类型 (int.long.boolean等) 和 (String.List.Map.CharSequence),使用这些类型时不需要import声明.对于List和Map中的元素类型必须是AIDL支持的类型,如果使用自定义类型作为参数或者返回值,自定义类型必须实

C#进程间通讯技术-整理。

原文:C#进程间通讯技术-整理. 扩展阅读:http://www.cnblogs.com/joye-shen/archive/2012/06/16/2551864.html 一.进程间通讯的方式 1)共享内存 包括:内存映射文件,共享内存DLL,剪切板. 2)命名管道及匿名管道 3)消息通讯 4)利用代理方法.例如SOCKET,配置文件,注册表方式. 等方式. 方法一:通讯. 进程间通讯的方式有很多,常用的有共享内存(内存映射文件.共享内存DLL.剪切板等).命名管道和匿名管道.发送消息等几种方

Linux 进程间通讯详解一

进程间的通讯 两台主机间的进程通讯 --socket 一台主机间的进程通讯 --管道(匿名管道,有名管道) --System V进程间通信(IPC)包括System V消息队列,System V信号量,System V共享内存 --socket 进程间共享内存的三种方式 --文件系统(通过系统调用读写磁盘文件,scoket)==>最慢 --Linux内核共享信息(直接在Linux内核中1进行通讯,比如管道,消息队列,信号)==>中等 --共享内存区(在自己进程内开辟一块内存,映射到系统内存)=

一个进程间同步和通讯的 C# 框架

转自原文 一个进程间同步和通讯的 C# 框架 threadmsg_demo.zip ~ 41KB    下载 threadmsg_src.zip ~ 65KB    下载 0.背景简介 微软在 .NET 框架中提供了多种实用的线程同步手段,其中包括 monitor 类及 reader-writer锁.但跨进程的同步方法还是非常欠缺.另外,目前也没有方便的线程间及进程间传递消息的方法.例如C/S和SOA,又或者生产者/消费者模式中就常常需要传递消息.为此我编写了一个独立完整的框架,实现了跨线程和跨

Paramics插件编程进程间通讯

一.进程间通讯 进程间的通讯,包括数据的交换与共享是一项实用的技术,多应用在大型系统中,一个大型的系统往往由多个程序部件组成,部件的形式是多种多样的,可以是动态链接库(DLL).Activex组件或控件,也可以是独立运行的程序.因此,在系统运行时各相关程序部件必然需要进行大量频繁的数据交换操作.动态链接库(DLL)与其主调应用程序之间的数据交换是非常容易实现的,但在两个应用程序之间,或是动态链接库与其主调应用程序之外的其他应用程序进行数据交换,就需要使用进程间通讯(interprocess co

Android Studio创建AIDL文件并实现进程间通讯

在Android系统中,跨进程通信是非常普遍的事情,它用到了Binder机制处理进程之间的交互.Binder机制会开放一些接口给java层,供android开发工程师调用进程之间通信.这些接口android封装到了AIDL文件里,当我们项目用到跨进程通信时可以创建.aidl文件,.aidl文件可以协助我们达到跨进程的通信.下面简单介绍用AndroidStudio创建AIDL文件的过程. a.新建AIDL文件 1.项目文件夹右键---> new --->选择AIDL 2.自定义一个接口名称 3.