2011-06-01 79 views
2

我无法与缓冲区:如何保存没有缓冲区的tty?

我有一个守护进程d,其监测M. d为M之前开始,和M打印任何相关信息到TTY,我需要分析该信息,并把它交给我自己的程序。

由于我想自动执行此操作,M应该打印到一个文件。但是直到守护进程因为缓冲区而被杀死。

所以我想记录的tty,因此试图使用脚本来记录其输出到终端,但...它也缓冲...

我也试图让访问GNU的coreutils(以使用我明显需要的stdbuf),但不得不放弃当我无法安装实用程序来解压缩在GNU网站上提出的奇特的.xz格式!

我担心我甚至没有做正确的事情! 这个问题没有一个简单的解决方案,可能每个人与实时工作有?

有一点帮助将不胜感激。谢谢。

回答

1
  1. 的.xz文件格式可以与xz7zip
  2. 似乎有一个LD_PRELOAD劈死达到同样的效果也可以提取:http://lists.gnu.org/archive/html/bug-coreutils/2008-11/msg00164.html

这页上的stdio我的首选参考缓冲:http://www.pixelbeat.org/programming/stdio_buffering/

PS。 “每个使用实时工作的人”都假定使用IPC,而不依赖bash。的Perl,Python和明显的所有下级语言提供的方式来明确地禁用/启用缓冲

+0

嗨sehe, 这其实不是给我头疼的.xz,而该应用工具将其解压缩(XZ ...)无法在我的机器上安装。但是我回到了存储库,发现了一个很好的打包.tar.gz。 我已经看到您提供给我的两个链接(或等价物),但未能理解如何将其应用于我的问题。不过,我会重新阅读它们。 – gqq 2011-06-01 13:40:11

+1

好吧,所以我设法安装了stdbuf,这正是我需要的! 我使用stdbuf -oL作为我的守护进程及其监视器的前缀。我想我仍然错过了实际录制的一部分(1行),但它不是重要的信息,所以我会认为暂时完成。 感谢您的指导,重新阅读了pixelbeat页面我终于明白了为什么libc被涉及,并且stdbuf技巧工作得很好;) 编辑:stdbuf是基于您提到的LD_PRELOAD hack。 – gqq 2011-06-01 14:12:03

相关问题