开头

  每个进程的用户地址空间都是独立的,进程与进程之间,内部空间是隔离的,进程 A 不可能直接使用进程 B 的变量名的形式得到进程 B 中变量的值。但内核空间是每个进程都共享的,所以进程之间要通信必须通过内核。实现进程与进程之间的通信,常用的方式主要有:管道、消息队列、共享内存、信号量、信号、socket等等。

进程间通信的方式及应用场景

 

 

一、管道

  在 Linux 命令中,常见的“|”符号就是一种管道。比如:

 ps auxf | grep mysql

 

  上面的命令中,“|”的功能是将前一个命令(ps auxf)的输出,作为后一个命令(grep mysql)的输入。这种管道没有名字,匿名管道,用完就销毁。命名管道也被叫做 FIFO,因为数据的传输方式是先进先出(first in first out)。

  管道传输数据是单向的,如果想相互通信,需要创建两个管道才行。

 

管道创建、写入、读取

创建

mkfifo myPipe

  myPipe 是新创建的管道的名称,基于 Linux 一切皆文件的理念,管道也是以文件的方式存在,可以用 ls 看到文件类型是 p,也就是 pipe(管道) 的意思:

$ ls -l
prw-r--r--. 1 root    root         0 Jul 17 02:45 myPipe
echo "hello" > myPipe  # 将数据写进管道。程序会阻塞,只有当管道里的数据被读完后,程序才会正常继续。
                         
管道写入数据

相关文章: