我有印象塞德没有阻止,因为当我说:
iostat | sed
sed处理数据到达时,但是当我这样做
iostat | sed | netcat
然后sed块netcat 。
我对吗?
使用netcat和grep有条件地运行命令
如何在响应中返回某个字符后closuresnetcat连接?
结合netcat与bash上的聊天自动udp响应
Netcat进入apache密码保护的目录
如何使用netcat发送文件,然后保持连接活着?
如何清除通过SSH ProxyCommand打开的连接?
我怎样才能访问subprocess的STDIN?
使用ssh,nohup和netcat无法使用bash转义工作
如何让Netcat返回未使用的端口
sed不能打印到终端时,它将在缓冲模式下工作。 这意味着在默认进行任何处理和输出之前,它将尝试填充其内部缓冲区。
这样做是为了提高吞吐量,因为通常在一个管道中你并不关心时间,而是希望在给定的时间内处理尽可能多的数据。
将-u传递给sed将会告诉它无缓冲地工作,因此在输出到终端时工作方式与它的工作方式相同。
除了@saua所说的东西, sed至少是面向行的,它读取一行,然后对其进行操作,所以它总是会缓冲至少一行。 另外, sed可以工作在多线模式。 如果你正在使用多行模式,那么sed不能输出它的当前缓冲区,直到它知道该模式不适用或模式已经被处理。
我不知道我是否理解这个问题,但在你的例子中,应该是这样的:
sed等待iostat发送数据
如果sed较慢,iostat将等待sed处理数据
netcat等待sed发送数据
如果速度慢,sed将再次等待netcat
除此之外,sed不需要读取所有的输入来产生输出。
你观察到任何延迟,这不能解释这个和一些小的缓冲?
stdbuf可以协助改变标准io流的缓冲行为。 你可以尝试这个来改变缓冲行为:
... | stdbuf -oL -eL sed -e ... | ...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。