2011-06-01 29 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

相關問題