Linux进程间通信概述

为什么需要进程间通信?

  进程是一个独立的资源分配单元,不同进程(这里所说的进程通常指的是用户进程)之间的资源是独立的,没有关联,不能在一个进程中直接访问另一个进程的资源(例如打开的文件描述符)。

  但是,进程不是孤立的,不同的进程需要进行信息的交互和状态的传递等,因此需要进进程间通信( IPC:Inter Processes Communication ),两个进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程 1 把数据从用户空间拷贝到内核缓冲区,进程 2 再从内核缓冲区把数据取走,内核提供的这种机制称为 进程间通信

   在进程间完成数据传递需要借助操作系统提供的特殊方法,如:文件、管道、信号、共享内存、消息队列、套接字、命名管道等。随着计算机发展,一些方法由于自身设计缺陷被淘汰,现如今常用的进程间通信方式有:

  • 管道(使用最简单)
  • 信号(开销最小)
  • 共享映射区(无血缘关系间进程通信)
  • 本地套接字(最稳定)

进程间通信的目的:·

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

Linux 操作系统支持的主要进程间通信的通信机制: