Linux进程间的通信方法简介

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux进程间的通信方法简介相关的知识,希望对你有一定的参考价值。

一、本地进程间的通信方式:

    1.管道(pipe)

        利用管道文件可以进行进程间数据的通信,通常是具有血缘关系的父子进程间的通信方式。

        管道通信为半双工模式,父子进程可以通过调用内核中的read()和write()命令来向管道文件进行读写操作。

        管道通信是基于硬盘内的文件,所以I/O速度较低。


    2.消息队列

        消息队列是一种类似链表的数据结构,存放于内存中,因此I/O速度较管道更快,通过ipcs -q命令可以查看当前系统中被创建的消息队列。

        多个不同进程可以使用同一个消息队列进行通信,消息队列中的数据是以块存放,每块数据有特定的mtype,进程在发送和接收数据的时候必须指定特定的mtype。


    3.信号量

        用于处理进程的同步和互斥:

            同步:严格安排进程执行的先后顺序

            互斥:两个进程不可以同时使用同一资源(代码段),可以说是特殊的同步

        信号量可以理解为一个计数器,当有进程申请使用信号量时,将其计数-1(P操作),当计数器为0时表示此时没有资源,其他进程要访问必须等待,当一个进程使用完毕资源时,将其计数+1(V操作)。


    4.共享内存

        类似消息队列,但操作更为简洁,通过ipcs -m命令可以查看当前系统中被创建的共享内存区。

        进程想使用共享内存区时,需要先创建对该共享内存的链接。


二、不同主机进程间的通信(网络通信)

    通过两台主机的一对套接字来进行通信,套接字由ip地址和端口号组成,一个套接字标识特定主机的特定进程。

    服务器进程创建套接字,将其设置监听状态,这种进程称为守护进程。

    之后客户端创建用于请求链接的套接字,对服务器处于监听状态的套接字发出链接请求,从而建立链接。


    

以上是关于Linux进程间的通信方法简介的主要内容,如果未能解决你的问题,请参考以下文章

深刻理解Linux进程间通信(IPC)

Linux 进程间通信

Linux系统编程—进程间的通信

linux进程间的通信(C): 信号量

IPC 进程间通信

进程间的通讯方式有几种?有啥优缺点