Linux管道是否是异步的?多个管道连接的sleep命令为何同时运行?
原理说明
你观察到的是类Unix系统中Shell管道的默认执行特性,核心逻辑如下:
- 所有用
|连接的命令,默认会同步启动为独立的子进程,不存在前一个执行完再启动下一个的逻辑。管道的作用仅为将前一个命令的标准输出绑定到后一个命令的标准输入,和进程启动时机完全无关。 - 你执行的
sleep 10 | sleep 2 | sleep 5三个进程启动后互不影响:sleep本身既不会读取标准输入,也不会产生任何标准输出,所以这里的管道没有实际数据传输,三个进程各自倒计时,到点就自行退出,因此你用ps命令可以同时看到三个进程存在。 - 你之前的认知对应的是
;或者&&这类命令分隔符的效果:只有这两类符号连接的命令,才会按顺序执行,前一个命令退出后才会启动下一个。
可搜索的关键词
直接用中文搜索以下关键词即可找到完整原理:
- Shell 管道执行逻辑
- Linux 管道 进程启动时机
- Shell 命令分隔符 管道 分号 区别
- Unix pipeline 执行模型
内容的提问来源于stack exchange,提问作者Minjune_
相关产品推荐
相关产品推荐

