news 2026/4/25 14:41:42

揭秘管道符:Linux命令并行执行的秘密

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
揭秘管道符:Linux命令并行执行的秘密

我们耳熟能详的操作系统:Linux、Windows以及一些数通设备(Huawei交换机等)都是支持管道符(|)的。

那么管道是如何工作的呢?跟我们“自认为”、“应如是”是否有出入呢?

结合AI给的解释,我们配合实验操作来看一下(看到最后会打破你固有认知哦)。

管道工作流程分解

以下是cmd1 | cmd2 | cmd3的完整执行流程:

步骤操作关键点
1. 解析与准备Shell识别管道符号|,创建无名管道和进程组管道本质上是内核提供的一段缓冲区(通常4KB)
2. 进程创建Shell为每个命令创建子进程(fork)所有子进程同时启动,形成管道链
3. 文件描述符重定向Shell设置每个进程的标准流:
cmd1:stdout → 管道写端
cmd2:stdin ← 管道读端,stdout → 新管道写端
cmd3:stdin ← 管道读端,stdout → 终端
关键:每个命令不知道自己在管道中,像正常程序一样读写
4. 并发执行所有命令并行运行,不是顺序执行cmd2cmd1产生输出前就会启动并等待输入
5. 数据传输数据流经管道缓冲区,像水流过水管如果读者慢,写者会阻塞;如果读者快,会等待数据
6. 进程终止命令按自己的节奏结束退出状态各自独立生成,互不影响
7. 状态收集Shell收集所有子进程的退出状态默认:只取最后一个(cmd3)的状态作为管道状态

针对如上的讲解,基本上都好理解。只有一点,管道串联的命令启动和运行不是顺序的,而是并行的。这个怎么验证一下子呢?

使用如下命令:

#!/bin/bash echo "=== 实验1:时间戳验证并行执行 ===" # 生产者:每秒产生一个时间戳 # 消费者:立即处理并打上自己的时间戳 ( echo "生产者启动: $(date +%T.%N)" for i in {1..5}; do echo "数据$i@$(date +%T.%N)" sleep 1 done echo "生产者结束: $(date +%T.%N)" ) | ( echo "消费者启动: $(date +%T.%N)" while read line; do echo "消费者处理 [$(date +%T.%N)]: $line" # 消费者处理速度快,没有延迟 done echo "消费者结束: $(date +%T.%N)" )

按照我们的固有理解,“生产者”肯定要最早运行,然后生产完所有数据,传递给“消费者”,消费者消费“生成数据”。但是,这是错误的哦。下面是shell脚本运行回显:

消费者启动: 11:53:59.614424713

消费者处理 [11:53:59.615773820]: 生产者启动: 11:53:59.614495023

消费者处理 [11:53:59.617394235]: 数据1@11:53:59.615758632

消费者处理 [11:54:00.620142390]: 数据2@11:54:00.618415176

消费者处理 [11:54:01.622494366]: 数据3@11:54:01.621038623

消费者处理 [11:54:02.625012448]: 数据4@11:54:02.623514739

消费者处理 [11:54:03.627571099]: 数据5@11:54:03.626168602

消费者处理 [11:54:04.630431399]: 生产者结束: 11:54:04.628782660

消费者结束: 11:54:04.631653786

可见,消费者启动时间要比生产者启动要,此后,每隔1s生产一条数据,消费者就会消费1条数据,而不是等所有数据都生产完。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/22 19:33:36

大数据领域数据仓库的元数据资产盘点

大数据领域数据仓库的元数据资产盘点:给数字世界做一次"全身检查"关键词:元数据、数据仓库、资产盘点、数据治理、元数据管理摘要:在大数据时代,企业的数据仓库就像一个装满"数字宝藏"的巨型仓库,…

作者头像 李华
网站建设 2026/4/23 9:24:45

BeeWorks:为政企沟通筑造稳定、安全、高效的协作基石

当一家大型央企的技术图纸与生产指令在全新的内部协作平台上瞬间同步到数千个终端时,信息安全负责人首次感受到了技术带来的从容。打开手机、电脑、平板,所有设备上的消息实时同步;在隔绝外网的涉密环境中,高清视频会议与大型文件…

作者头像 李华
网站建设 2026/4/23 14:29:30

EmotiVoice + GPU加速:实现高效实时语音合成

EmotiVoice GPU加速:实现高效实时语音合成 在直播配音、虚拟偶像对话、智能客服等场景中,用户早已不再满足于“能说话”的机械语音。他们期待的是有情绪起伏、带个性音色、响应即时的自然表达——这正是新一代文本转语音(TTS)技术…

作者头像 李华
网站建设 2026/4/18 10:15:41

26、Mac OS X 服务器功能配置全解析

Mac OS X 服务器功能配置全解析 在Mac OS X系统中,具备丰富的服务器功能,如文件共享、FTP服务、Web共享以及远程登录等。下面将详细介绍这些功能的配置方法和相关要点。 文件共享配置 文件共享功能允许用户在网络中共享文件夹和磁盘。在共享文件夹列表右侧的用户列表中,显…

作者头像 李华
网站建设 2026/4/23 2:58:20

30、Mac系统内核与配置工具全解析

Mac系统内核与配置工具全解析 1. sysctl工具介绍 sysctl 是一个标准的 BSD 工具,用于配置内核状态变量。以下是它的基本使用方法: - 显示单个变量:使用 sysctl name 命令,例如 sysctl kern.ostype 可以显示 kern.ostype 变量的值。 - 显示所有变量:使用 sysctl…

作者头像 李华
网站建设 2026/4/24 23:00:15

27、Mac OS X 服务器功能与安全设置全解析

Mac OS X 服务器功能与安全设置全解析 1. SSH 安全设置 在服务器和远程机器上为所有用户启用公钥认证并设置好公钥和私钥后,建议在 SSH 服务器上禁用密码认证。因为与密码认证不同,公钥认证在认证过程中不会传输敏感信息(如密码),本质上更加安全。 通常,SSH 在 TCP 端口…

作者头像 李华