非阻塞缓冲命名管道?

非阻塞缓冲命名管道?

我正在寻找一些我怀疑不存在的东西:用于从命令行使用的非阻塞缓冲命名管道(fifo)。有这样的事吗?

这是用例:假设我有一个进程将在后台运行很长时间并将大量输出输出到stdout.我并不真正关心输出,也不想存储它(也许我没有足够的空间),但我想定期“插入”并跟踪它正在做什么,然后再次退出并让它继续工作。所以我想将其输出重定向到这个理论上的缓冲、非阻塞命名管道,然后定期利用它。

所以基本上我想像这样开始(10M缓冲区的大小):

mkmagicfifo magicfifo 10M
spewingprocess > magicfifo &

...并定期过来看看发生了什么...

tail -f magicfifo

...没有 magicfifo存储所有输出(因此,不是普通文件),并且没有当它填满并且未被点击时,它会阻止喷射过程(因此,这不是一个正常的命名管道)。

我不认为涉及tailprune会做到这一点的解决方案(好吧,我可以想到涉及的解决方法tail),因为tail仍然需要我将所有数据存储在某处(如果我想插入并退出查看它),并且prune必须重写文件,大概(我承认我没有尝试/证明这一点)破坏了生成所有输出的进程的重定向。

我希望我可以编写一些实用程序来执行此操作,但是 *nix 有很多文件和管道等很酷的方面,我只是情不自禁地认为它存在,但我只是不知道它。

那么:是否有这样的事情?如果有的话,它是什么?

ベストアンサー1

我认为您正在寻找的是 GNU screen。它维护一个缓冲区来保存一个或多个程序的最后一个屏幕或两个输出,并让您断开连接并稍后返回。

おすすめ記事