gpt4 book ai didi

unix - 为什么 "yes | head"不挂?

转载 作者:行者123 更新时间:2023-12-04 14:13:35 24 4
gpt4 key购买 nike

为什么不yes | head悬挂?

我以为系统会收集来自 yes 的所有结果然后通过管道将其发送到 head ,并且因为 yes是无限循环,系统挂了。但是,它实际上可以停止并显示 y 的 10 行.

系统如何设法停止 yeshead收集数据完成了吗?

最佳答案

当你说 yes | head shell 会安排这样的事情,使得 yes 的输出转到 pipehead的输入来自同一个管道。当head读取 10 行,它关闭它的 STDIN_FILENO,从而关闭它的管道末端。当yes尝试写入一个封闭的管道,它得到一个 SIGPIPE其默认操作是杀死它。

一个简单的测试方法是使用 strace :

$ strace yes | head
y
[...]
y
write(1, "y\ny\ny\ny\ny\ny\ny\ny\ny\ny\ny\ny\ny\ny\ny\ny\n"..., 4096) = -1 EPIPE (Broken pipe)
--- SIGPIPE {si_signo=SIGPIPE, si_code=SI_USER, si_pid=4069, si_uid=1000} ---
+++ killed by SIGPIPE +++

关于unix - 为什么 "yes | head"不挂?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21350608/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com