Linux 管道/tee 进程序列

Linux 管道/tee 进程序列

我认为对于 linux 命令,管道: $ command1 | command2 | command3 将按顺序执行命令 1 -> 命令 2 -> 命令 3。

但是使用 tee 怎么样: $ command1 | tee >(command2) >(command3)

由于command2command3具有相同的输入,我的问题是,command2和将command3并行执行(多线程?)还是按顺序 2->3 执行?

谢谢。

答案1

如果它们能够并行执行,它们将并行执行。命令tee将在获得输入后向两个命令提供输入。如果它们在输入时被阻止,这将使它们“准备运行”,然后操作系统会将它们调度到任何可用的内核上。这不是多线程,因为那是在进程内发生的。这是多进程操作。

答案2

尝试运行此命令(稍后按 Ctrl-C 键):

(od -x /dev/urandom | tee >(sed 's/^/1 /') >(sed 's/^/2 /')) > /tmp/output

当每个进程有机会运行时,/tmp/output 将被交错和覆盖。

另外,当您说“将按顺序执行”时,这是不正确的。我认为 DOS 曾经使用临时文件模拟管道,但 Unix 没有。

(我之前从未见过 >() 语法。每天学习新东西!)

相关内容