2010-10-01 33 views
1

我在Mac上運行一個後臺進程,並有日誌更新的問題。如果我運行如何在Mac上記錄無緩衝後臺進程的STDOUT?

someprog > mylog & 

然後mylog並不會立即更新,但也有一些間隔 - 我想這是由於緩衝。與at now一樣的東西。如果我在輸出寫入mylog之前殺死程序,那麼我將丟失數據。 Linux機器上的相同程序沒有這樣的問題,所以我希望我可以在Mac上使它運行時更新。任何想法如何?

someprog是一個F77程序,它不是我寫的。

I tried to ask這個問題在超級用戶,但沒人能幫到我。

EDIT1:我不喜歡改變的來源,但是記住它。日誌記錄在Linux機器上運行良好,因此它也可以在Mac上運行。它必須是系統設置,例如緩衝區大小?對於我來說,將緩衝區大小限制在一個較小的值是可以的 - 現在我必須等待幾個小時才能看到日誌中的內容。

回答

2

如果您有權訪問源代碼,則可以在每次printf後添加對fflush(stdout)的調用。如果你不這樣做,你可以用LD_PRELOAD來嘗試一些棘手的問題......基本上,你可以製作自己的調用libc的printf的printf()版本...並執行flush ...然後LD_PRELOAD該庫在運行時...該應用程序將使用你的,而不是...有點冒險tho ...

1

這是正在寫入非tty流的POSIX C程序的通常行爲 - 我猜F77共享相同的行爲,或寫入條款的stdio例程。

我不知道正確的答案是什麼 - 我想你需要通過假裝是tty的東西來管輸出,但是我不知道實用程序提供了什麼選項(如果有的話) 。

相關問題