我想创建一个文件描述符,当写入时可以从多个进程读取而不消耗数据。我知道命名管道,但由于它是 fifo,所以只有一个进程可以获得数据。
我的用例如下。使用 git,钩子(Hook)使用标准输入将要处理的数据传递到钩子(Hook)中。我希望能够从父 Hook 调用多个子 Hook 。每个子 Hook 都应获得与父级接收的相同的标准输入数据。如果我在使用管道时没有弄错,那么每个子进程将不会获得相同的标准输入。相反,第一个读取 stdin 的钩子(Hook)会消耗数据。这是正确的吗?
此时我真正认为可行的唯一选择是将标准输入写入文件,然后从每个子进程读取该文件。还有别的办法吗?
最佳答案
或许您可以尝试使用 tee。
来自男式T恤:
tee - read from standard input and write to standard output and files
在您以这种方式处理的情况下:tee >(parent) >(hook1) >(hook2) >(hookn)
(每个钩子(Hook)都是一个不同的进程、命令、shell 任何你想要的)
举个例子:
#!/bin/bash
while read stdinstream
do
echo -n ${stdinstream} | tee >(parent) >(hook2) >(hook1)
done
编辑:
在您的情况下,我认为您不需要 while 循环,这就足够了:
read stdinstream
echo -n ${stdinstream} | tee >(parent) >(hook2) >(hook1)
希望这对你有帮助。
关于linux - 如何在 linux 中创建一个可以从多个进程读取而不消耗数据的文件描述符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19501075/