微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是sed阻塞?

我有印象塞德没有阻止,因为当我说:

iostat | sed

sed处理数据到达时,但是当我这样做

iostat | sed | netcat

然后sed块netcat 。

我对吗?

使用netcat和grep有条件地运行命令

如何在响应中返回某个字符后closuresnetcat连接?

使用netcatpipe道unix套接字到TCP套接

结合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] 举报,一经查实,本站将立刻删除。

相关推荐