linux - 如何在 linux 中创建一个可以从多个进程读取而不消耗数据的文件描述符?

标签 linux ipc pipe file-descriptor io-redirection

我想创建一个文件描述符,当写入时可以从多个进程读取而不消耗数据。我知道命名管道,但由于它是 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/

相关文章:

arrays - Bash格式化数组

node.js - 从另一个 Nodejs 应用程序调用一个 Nodejs 应用程序中的 API 的方法

c - C 中的管道 — 在我的程序中读取和写入

ipc - Node-IPC从服务器向客户端发送消息

android - 是否可以在一个地方托管 aidl 文件?

c - 在计算单词代码上应用 fork() 和 pipe()(或 fifo())

c - 将 bash 命令 echo 和 bc 管道化到 C 程序中

php - 管道关闭后向进程发送哪个信号

linux - 如何修复centos7中的这些错误

ruby-on-rails - 无法在 Debian 上启动 Rails Server "sqlite3/sqlite3_native (LoadError)"