Linux进程间通讯(IPC)有几种方法,下边将将简单的阐述一下:
一。管线(pipe)
管线是Linux支持的最初IPC形式,管线可分为无名管线,有名管线等。
(一)无名管线,它具有几个特征:
1)管线是半双工的,只能支持数据的双向流动;两进程间须要通讯时须要构建起两个管线;
2)无名管线使用pipe()函数创建,只能用于兄妹进程或则兄弟进程之间;
3)管线对于通讯的两端进程而言,实质上是一种独立的文件,只存在于显存中;
4)数据的读写操作:一个进程向管线中写数据,所写的数据添加在管线缓冲区的尾部;另一个进程在管线中缓冲区的腹部读数据。
(二)有名管线
有名管线也是半双工的unix系统 进程间通信,不过它容许没有亲缘关系的进程间进行通讯。具体点说就是,有名管线提供了一个路径名与之进行关联,以FIFO(先进先出)的方式存在于文件系统中。这样虽然是不相干的进程也可以通过FIFO相互通信,只要她们能访问早已提供的路径。
值得注意的是,只有在管线有读端时,往管路中写数据才有意义。否则,向管线写数据的进程会接收到内核发下来的SIGPIPE讯号;应用程序可以自定义该讯号处理函数,或则直接忽视该讯号。
二。讯号量(semophore)
讯号量是一种计数器,可以控制进程间多个线程或则多个进程对资源的同步访问,它常实现为一种锁机制。实质上,讯号量是一个被保护的变量,但是只能通过初始化和两个标准的原子操作(P/V)来访问。(P,V操作也常称为wait(s),signal(s))
三。讯号(Signal)
讯号是Unix系统中使用的最古老的进程间通讯的方式之一。操作系统通过讯号来通知某一进程发生了某一种预定好的风波;接收到讯号的进程可以选择不同的形式处理该讯号,一是可以采用默认处理机制—进程中断或退出,一是忽视该讯号,还有就是自定义该讯号的处理函数,执行相应的动作。
内核为进程生产讯号,来响应不同的风波,这种风波就是讯号源。讯号源可以是:异常,其他进程,终端的中断(Ctrl-C,Ctrl+等),作业的控制(前台,后台进程的管理等),分配额问题(cpu超时或文件过大等),内核通知(比如I/O就绪等),报案(计时器)。
四。消息队列(MessageQueue)
消息队列就是消息的一个数组,它容许一个或则多个进程向它写消息,一个或多个进程向它读消息。Linux维护了一个消息队列向量表:msgque,来表示系统中所有的消息队列。
消息队列克服了讯号传递信息少,管线只能支持无格式字节流和缓冲区受限的缺点。
五。共享显存(sharedmemory)
共享显存映射为一段可以被其他进程访问的显存。该共享显存由一个进程所创建,之后其他进程可以挂载到该共享显存中。共享显存是最快的IPC机制,但因为linux本身不能实现对其同步控制,须要用户程序进行并发访问控制,因而它通常结合了其他通讯机制实现了进程间的通讯,比如讯号量。
五。套接字(socket)
socket也是一种进程间的通讯机制,不过它与其他通讯方法主要的区别是:它可以实现不同主机间的进程通讯。一个套插口可以看做是进程间通讯的端点(endpoint)unix系统 进程间通信linux系统镜像下载,每位套插口的名子是惟一的;其他进程可以访问linux系统入门学习,联接和进行数据通讯。
文章评论