2012-09-27 66 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

相关问题