2012-09-27 62 views
3

我有一個嵌入式應用程序,我想要一個簡單的記錄器。腳本運行程序時,stdout會發生什麼?

系統從一個腳本文件開始,該腳本文件運行應用程序。可能有各種原因導致腳本無法運行應用程序,或者應用程序本身可能無法啓動。爲了遠程診斷,我需要從腳本和應用程序中查看stdout。

我試着寫了一個tee-like記錄器,它會將stdin重複爲標準輸出,並將文本保存在FIFO中供以後通過網絡檢索。然後,我天真地試圖

./script | ./logger 

我最終只腳本標準輸出去記錄器,以及應用標準輸出消失。我嘗試使用類似的結果。

系統運行內核2.4.26和busybox。

這是怎麼回事,我該如何完成我想要的目標?

回答

4

事實證明它被儘可能精確工作我認爲它應該工作,只有一個小問題。標準輸出被緩衝,沒有任何fflush(標準輸出)命令,我從來沒有看到它。如果我真的有耐心,當stdout緩衝區填滿時,我會突然看到一大堆輸出。對setlinebuf(3)的調用解決了我的問題。

0

顯然,應用輸出不會結束在stdout ...

  1. 輸出實際上是在stderr(其通常也連接到終端)

    ./script.sh 2>&1 | ./logger 
    

    然後應該工作

  2. 該應用程序主動斷開stdin /標準輸出(例如通過關閉/重新打開文件desc riptors 0,1(2),或者,使用nohupexec或類似效用)

  3. 腳本daemonizes(其也從所有標準流分離)

+0

1.我剛剛嘗試過。它沒有幫助。可能有一些stderr,但大部分輸出是stdout。我認爲我沒有那樣做。 3.沒有守護進程。線程,是的。我沒有看到原始線程中的任何內容。 – rich

相關問題