从进程中读取stdout(linux embedded)

时间:2012-02-10 21:36:01

标签: linux stdout busybox

在将问题标记为重复之前,请阅读我遇到的各种问题。

一些背景知识:我们正在使用debian linux的lite变体开发在嵌入式ARM sbc上运行的C ++应用程序。应用程序在启动脚本启动时启动,并将各种信息打印到stdout。我们希望能够使用SSH / Telnet连接并读取应用程序输出,而无需终止进程并为当前的bash会话重新启动它。我想为非技术人员创建一个简单的.sh脚本。

此处发布的similar question的第一个解决方案是使用gdb。首先它不是用户友好的(需要手动编写多个命令),我想知道为什么但它似乎没有输出任何文件。

第二个解决方案strace -ewrite -p PID完美无缺,这就是我想要的。问题是,除了stdout之外,还有更多的信息,而且格式错误。

我设法通过strace -e write=1 -s 1024 -p 20049 2>&1 | grep "write(1,"获得了“可接受”的结果,但它仍然有多余的write(1, "...", 19) = 19文字。到目前为止,它只是一些字符串格式化,我在其他多个页面上找到了这一行,说它可以实现良好的格式化:strace -ff -e write=1,2 -s 1024 -p PID 2>&1 | grep "^ |" | cut -c11-60 | sed -e 's/ //g' | xxd -r -p

在这个命令中有一些我觉得奇怪的事情(为什么-ff ?,为什么grep“^ |”?,为什么在那里使用xxd?)并且它在我尝试时它不输出任何东西。

不幸的是,我们确实使用了一个旧的bugbox版本的busybox(1.7.1),它对多个管道有一些问题。那个bug给了我不好的结果。例如,如果我只做grep它可以工作,如果我只做切割它也有效,但让我们说“grep”写(1,“| cut -c11-60”什么也不返回。

我知道真正的解决方案只是更新busybox并使用这些多个管道格式化字符串,但我们无法更新它,因为os发行版已安装在运往全球客户的数千块电路板上。 / p>

任何人都有神奇的解决方案吗?感谢

1 个答案:

答案 0 :(得分:0)

可以使用reptyr(http://blog.nelhage.com/2011/01/reptyr-attach-a-running-process-to-a-new-terminal/)将屏幕连接到现有流程,或者您可以使用我还没有使用的neercs(http://caca.zoy.org/wiki/neercs),但显然就像屏幕一样,但支持单独附加到现有流程。