Shell管道如何处理无限循环

4
每当我需要限制shell命令的输出时,我使用less来对结果进行分页: cat file_with_long_content | less 这很好用,但我想知道的是,即使输出是无穷无尽的,less仍然能够工作得很好。考虑在inf.sh文件中有以下脚本: while true; do date; done 然后我运行 sh inf.sh | less 并且它仍然能够再次对结果进行分页,所以是否正确地说,管道流将结果传输而不是等待命令完成后再输出结果呢?
2个回答

7
是的,当您运行sh inf.sh | less时,这两个命令是并行运行的。第一个进程写入管道的数据被内核缓冲,直到第二个进程读取。如果缓冲区已满(即第一个命令写入管道的速度比第二个进程读取的速度快),则下一次写操作将阻塞,直到有更多可用空间。从空管道读取时也会出现类似的情况:如果管道缓冲区为空但输入端仍然打开,则读取将阻塞以获取更多数据。
有关详细信息,请参见pipe(7)手册。

1

没错。Pipes 就是流

你可以用很少的 C 代码行编写自己版本的 less 工具。花点时间去做,包括对文件和管道的简短研究,你将会获得足够的理解来回答自己的问题以及更多 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接