T.J*_*der 24 pipe io-redirection
我正在寻找我怀疑不存在的东西:从命令行使用的非阻塞缓冲命名管道 (fifo)。有这样的事情吗?
这是用例:假设我有一个进程将在后台运行很长时间并将大量输出输出到stdout. 我并不真正关心输出,也不想存储它(也许我没有足够的空间),但我想定期“加入”并关注它在做什么,然后再次退出让它去做它的工作。所以我想将它的输出重定向到这个理论上的缓冲的、非阻塞的命名管道,然后定期访问它。
所以基本上我想这样开始(10M缓冲区的大小):
mkmagicfifo magicfifo 10M
spewingprocess > magicfifo &
Run Code Online (Sandbox Code Playgroud)
......并定期访问看看发生了什么......
tail -f magicfifo
Run Code Online (Sandbox Code Playgroud)
...不 magicfifo存储所有输出(因此,不是普通文件),并且在它填满且未被点击时不会阻塞喷出过程(因此,不是一个普通的命名管道)。
我不认为解决方案涉及tail或prune不会这样做(好吧,我可以想到一个涉及的解决方法tail),因为tail仍然需要我将所有数据存储在某处(如果我想进入并退出查看它),并且prune必须重写文件,大概(我承认我没有尝试/证明这一点)破坏了生成所有输出的过程的重定向。
我希望我可以编写一些实用程序来做到这一点,但是 *nix 有很多很酷的文件和管道方面的东西,我不禁认为它存在,我只是不知道它。
那么:有没有这样的事情,如果有的话是什么?
psu*_*usi 16
我认为您正在寻找的是 GNU screen。它维护一个缓冲区,用于保存一个或多个程序的最后一个或两个输出的完整屏幕,并让您断开连接并稍后返回。
您可以使用pv,它可以在管道中提供尽可能多的缓冲。你可以这样使用它:
sprewingprocess | pv -B 1g > ordinaryfifo &
Run Code Online (Sandbox Code Playgroud)
这将为您提供最多 1GB 的缓冲区spewingprocess和 fifo。pv信不信由你,大多数 Linux 发行版都提供了一个名为pv.