精华内容
下载资源
问答
  • Linux进程间通信方式

    2021-01-14 16:26:38
    二、Linux进程间通信方式简介 ​​​​​​​ 前言 进程间的通信就是在不同进程之间传播或者交换信息。进程的用户空间是相互独显然可以体用这几样的立的,一般而言是不能互相访问的,唯一的例外是共享空间。但是...

    目录

     

    前言

    一、进程间通信的目的

    二、Linux进程间通信方式简介


     


    前言

    进程间的通信就是在不同进程之间传播或者交换信息。进程的用户空间是相互独显然可以体用这几样的立的,一般而言是不能互相访问的,唯一的例外是共享空间。但是系统空间却是“公共场所”,所以内核显然可以提供这样的条件。除此以外,那就是双方都可以访问的外设了。在这个意义上,两个进程当然可以通过磁盘上的普通文件交换信息,或者通过“注册表”或其他数据库中的某些表项和记录交换信息。在广义上,这也是进程间通信的手段,到那时一般不把这算作进程间通信。

    一、进程间通信的目的

    (1)数据传输:一个进程需要将它的数据发送给另外一个进程,发送的数据量在一个字节到几兆字节之间。

    (2)共享数据:多个进程想要操作共享数据,若一个进程对共享数据进行修改,别的进程可以立刻看到

    (3)通知事件:一个进程需要向另一个或一组进程发送消息,通知它发生了某件事件(在进程中止时要通知父进程)

    (4)资源共享:多个进程之间需要共享同样的资源。为了做到这一点,需要内核提供锁和同步机制

    (5)进程控制:有些进程希望完全控制另一个进程的执行(例如Debug进程),此时进程控制希望能够拦截另一个进程的所有信息和异常,并能够及时知道它的状态。

    二、Linux进程间通信方式简介

    在Linux下进程间通信的几种主要方式如下:

    • 管道(Pipe)和有名管道(FIFO)
    • 信号(Signal)
    • 消息队列
    • 共享内存(Shared Memory)
    • 信号量(Semaphore)
    • 套接字(Socket)

    (1)管道和有名管道。管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。

    (2)信号(Signal)。信号是比较复杂的通信方式,用于通知接收进程有某种时间发生,除了用于进程间通信外,进程还可以发送信号给进程本身,Linux除了支持UNIX早期信号语义函数signal外,还支持语义符合Posix1,标准的信号函数sigaction(实际上,该函数是基于BSD的,BSD为了实现可靠信号机制的同时又能够同一对外接口,用sigaction函数重新实现了signal函数)

    信号是在软件层次上对中断机制的一种模拟,是一种一步通信方式

    信号可以直接进行用户空间进程和内核进程之间的交互,内核进程也可以利用它来通知用户空间进程发生了哪些系统事件,他可以在任何时候发给某一进程,而无需知道该进程的状态。

    如果该进程当前并未处于执行形态,则该信号就由内核保存起来,知道该进程恢复执行再传递给它;如果一个信号被进程设置为阻塞,则该信号的传递被延迟,直到其阻塞被取消时才传递给进程

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

    (4)信号量(Semaphore)/信号灯。信号量主要被用作进程间或统一进程不同线程之间的同步手段,信号量是用来解决进程之间的同步互斥问题的一种进程之间的通信机制,包括一个称为信号量的变量和在该信号量下等待资源的进程等待队列,以及对信号量进行的两个原子操作(PV操作)。由于信号量对应于某一种资源,去一个非负的整数值。信号量的值是指当前可用的资源数量,若它等于0则意味着目前没有可以用的资源。

    (5)共享内存(Shared Memory)共享内存可以说是最有用的进程间通信方式,也是最快的PC形式,两个不同进程AB共享内存的意思是,同一块物理内存被映射到进程A和进程B各自的进程地址空间内,进程A可以及时看到进程B对共享内中数据的更新,反之亦然。由于多个进程共享同一块内存地址,必然需要某种同步机制,互斥锁和信号量都可以。采用共享内存通信的一个显而易见的好处是效率高,因为进程可以直接读写内存,而不需要任何数据的复制。

    (6)套接字(Socket)套接字是更为一般的进程间通信机制,可用于不同机器之间的进程间通信

     

     

    展开全文
  • linux 进程间通信方式

    2019-09-21 21:16:35
    管道:  它包括无名管道和有名管道两种,前者用于父进程和子进程间的通信,后者用于运行于同一台机器上的任意两个进程间的通信消息... 共享内存是运行在同一台机器上的进程间通信最快的方式,因为数据不需要在...


    管道:

      它包括无名管道和有名管道两种,前者用于父进程和子进程间的通信,后者用于运行于同一台机器上的任意两个进程间的通信
    消息队列:

      用于运行于同一台机器上的进程间通信,它和管道很相似,是一个在系统内核中用来保存消息的队列,它在系统内核中是以消息链表的形式出现。消息链表中节点的结构用msg声明。
    共享内存:

      共享内存是运行在同一台机器上的进程间通信最快的方式,因为数据不需要在不同的进程间复制。通常由一个进程创建一块共享内存区,其余进程对这块内存区进行 读写。
    得到共享内存有两种方式:映射/dev/mem设备和内存映像文件。 前一种方式不给系统带来额外的开销,但在现实中并不常用,因 为它控制存取的将是 实际的物理内存,在Linux系统下,这只有限制Linux系统存取的内存才可以做到,这当然不太实际。常用的方式是通过shmXXX函数族来实现利 用共享内存进行存储的。
    信号量:

      信号量又称为信号灯,它是用来协调不同进程间的数据对象的,而最主要的应用是前一节的共享内存方式的进程间通信。本质上,信号量是一个计数器,它用来记录对某个资源(如共享内存)的存取状况。
    套接口(socket)编程:

      是实现Linux系统和其他大多数操作系统中进程间通信的主要方式之一。我们熟知的WWW服务、FTP服务、TELNET服务 等都是基于套接口编程来实现的。除了在异地的计算机进程间以外,套接口同样适用于本地同一台计算机内部的进程间通信

    转载于:https://www.cnblogs.com/zzy-frisrtblog/p/5977738.html

    展开全文
  • linux进程间通信方式

    2018-06-22 16:41:00
    linux常见进程间通信方式有:管道,有名管道,信号量,消息队列,共享内存,内存映射、socket套接字。共享内存是最快的IPC方式。 转载于:https://www.cnblogs.com/wangliangblog/p/9214232.html...

    linux常见进程间通信方式有:管道,有名管道,信号量,消息队列,共享内存,内存映射、socket套接字。共享内存是最快的IPC方式。

    转载于:https://www.cnblogs.com/wangliangblog/p/9214232.html

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,133
精华内容 2,053
关键字:

linux进程间通信方式

linux 订阅