Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 当脚本运行程序时,stdout会发生什么情况?_Linux_Embedded Linux - Fatal编程技术网

Linux 当脚本运行程序时,stdout会发生什么情况?

Linux 当脚本运行程序时,stdout会发生什么情况?,linux,embedded-linux,Linux,Embedded Linux,我有一个嵌入式应用程序,我想要一个简单的记录器 系统从一个脚本文件开始,脚本文件反过来运行应用程序。脚本无法运行应用程序可能有各种原因,或者应用程序本身无法启动。要远程诊断这个问题,我需要从脚本和应用程序中查看stdout 我试着编写一个类似于tee的记录器,将其stdin重复到stdout,并将文本保存在FIFO中,以便稍后通过网络检索。然后我天真地尝试了 ./script | ./logger 最后,只有脚本stdout进入记录器,而应用程序stdout消失了。我在试T的时候也有类似的

我有一个嵌入式应用程序,我想要一个简单的记录器

系统从一个脚本文件开始,脚本文件反过来运行应用程序。脚本无法运行应用程序可能有各种原因,或者应用程序本身无法启动。要远程诊断这个问题,我需要从脚本和应用程序中查看stdout

我试着编写一个类似于tee的记录器,将其stdin重复到stdout,并将文本保存在FIFO中,以便稍后通过网络检索。然后我天真地尝试了

./script | ./logger  
最后,只有脚本stdout进入记录器,而应用程序stdout消失了。我在试T的时候也有类似的结果

系统运行内核2.4.26和busybox


发生了什么,我如何才能达到我想要的目的?

显然,应用程序的输出并没有在标准输出上结束

  • 输出实际上在stderr上(通常也连接到终端)

    那就行了

  • 应用程序主动断开与stdin/stdout的连接(例如,通过关闭/重新打开文件描述符0,1(,2),或使用
    nohup
    exec
    或类似实用程序)

  • 脚本守护进程(也与所有标准流分离)


  • 结果证明它完全按照我的想法工作,只是有一个小问题。stdout正在被缓冲,没有任何fflush(stdout)命令,我从未见过它。如果我真的有耐心,当标准输出缓冲区填满时,我会突然看到大量输出。调用setlinebuf(3)修复了我的问题。

    1。我刚试过。这没用。可能有一些stderr,但大部分输出都是stdout。2.我想我一点也没做。3.没有守护进程。是的。我没有看到原始线程中的任何内容。
       ./script.sh 2>&1 | ./logger