gpt4 book ai didi

linux - 从进程读取标准输出(Linux 嵌入式)

转载 作者:太空宇宙 更新时间:2023-11-04 04:25:39 25 4
gpt4 key购买 nike

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

一些背景知识:我们正在使用 debian Linux 的精简版开发在嵌入式 ARM sbc 上运行的 C++ 应用程序。该应用程序在启动时由启动脚本启动,并将各种信息打印到标准输出。我们想要的是能够使用 SSH/Telnet 连接并读取应用程序输出,而不必终止进程并为当前 bash session 重新启动它。我想创建一个简单的 .sh 脚本供不懂技术的人使用。

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

第二种方案strace -ewrite -p PID工作完美,这就是我想要的。问题是,除了标准输出之外还有很多信息,而且格式很糟糕。

我设法通过 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?),当我尝试它时,它只是不输出任何内容。

不幸的是,我们确实使用了旧的有缺陷的 busybox (1.7.1) 版本,它在多个管道方面存在一些问题。这个错误给我带来了不好的结果。例如,如果我只执行 grep 它可以工作,如果我只执行 cut 它也可以工作,但假设“grep "write(1,"| cut -c11-60"不返回任何内容。

我知道真正的解决方案只是更新 busybox 并使用这些多个管道来格式化字符串,但我们无法更新它,因为操作系统发行版已经安装在运送给我们全局客户的数千 block 板上。

有人有神奇的解决办法吗?谢谢

最佳答案

Screen可以使用reptyr(http://blog.nelhage.com/2011/01/reptyr-attach-a-running-process-to-a-new-terminal/)连接到现有进程,或者您可以使用neercs(http://caca.zoy.org/wiki/neercs),我没有使用过它,但显然类似于screen,但支持单独附加到现有进程。

关于linux - 从进程读取标准输出(Linux 嵌入式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9235145/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com