【发布时间】:2021-08-26 15:03:02
【问题描述】:
我以为当我在命令下运行时
sleep 10 | sleep 2 | sleep 5
Linux进程会
86014 ttys002 0:00.03 bash
86146 ttys002 0:00.00 sleep 10
sleep 10 结束时 -> sleep 2(睡眠 2 结束时)-> sleep 5
我是这么想的
但在 Linux bash 中,sleep 10, sleep 2, sleep 5 与 ps 同时存在
sleep 10 进程的标准输出将被重定向到sleep 5 的进程
但是,在这种情况下,sleep 5 的进程将在sleep 10 之前完成
我很困惑,有没有关于这种现象的谷歌关键字或概念?
(我英文不好,可能这个文字看不懂????。谢谢)
【问题讨论】:
-
我看不出你的困惑来源:
sleep不写入标准输出也不从标准输入读取,因此不使用管道。如果不需要同步,“命令管道”中的每个命令都将并行运行。您希望发生什么不同的事情? -
@rodrigo 那么,当
command 1 | command 2没有情况下command2 在command 1 完成之前完成?我希望pipe connect->fork->run command1->command1 finished->wait(command1's process) is end->fork(for command2)->run command2->finish这个过程 -
我正在重读您的问题并完全猜到了。我在下面的答案尝试...
-
在通用的
cmd1 | cmd2中,第二个命令通常会阻塞从管道读取。在它读取它需要的所有数据之前,它不会完成。如果它不需要更多的数据,它还不如早点结束。
标签: linux redirect process pipe