管道(pipe)是linux最常用的IPC通信手段。
比如下面命令中的|就是一个匿名管道,管道作为通道(channel)连接两个进程,一个是ls,一个是grep hello.txt, 不过这是匿名管道
ls | grep hello.txt
命名管道
可以使用mkfifo命令创建一个命令管道
# 会在当前目录创建一个名字为pipe2的管道文件
mkfifo pipe2
- 进程1:
# 将一条消息写入管道文件,当前进程阻塞
echo hello > pipe2
- 进程2
# 从管道文件中读取ls-进程1的输出,进程1退出阻塞。
cat < pipe2
golang创建fifo
runc exec 中可能用管道实现,获取容器bash执行输出
package main
import (
"golang.org/x/sys/unix"
)
func main() {
unix.Mkfifo("testfifo",0o777)
}