当前位置:   article > 正文

linux后台运行打印到文件,Linux中获取已后台运行进程的输出

嵌入式linux 获取后台打印输出信息

正常来说,我们运行一个程序,它会输出一些log,你可以通过重定向把输出放到一个文件里,比如:

./a.out > a.log

或者更聪明一点,使用tee同时将输出写入文件和标准输出:

./a.out | tee a.log

你可以在这些命令后面使用 & 让程序后台运行,通过检查a.log来看运行情况。

但是,如果你已经通过后台运行了一个程序,也没有将标准输出记录到文件里,然后你退出了登陆,再次进来时,我如何得到它正在进行的log输出呢?

很明显这是一个很不寻常的诉求,我刚刚在使用aria2下载的时候碰到了这个问题,虽然我可以关闭并重启来续传,但是我并不想这么做(断掉的Peer重连也是要一点时间的),于是考虑有没有可能可以偷看到这个已经消失的输出信息。

一开始,我想通过/proc/{pid}/fd 中的输出句柄查看,非常可惜的是,1这个句柄(也就是STDOUT)显示deleted,也就无法再读取或者展示了,那么也就是说,除了hack这个进程本身,可能没有更好的方法了?

gdb应该是调试程序的好手,但是对于已经运行的程序来说,没有比 strace 更合适的了,通过观察manpage,我发现了将输出打印出来的方法,锵锵:

strace -p {pid} -ewrite

这个命令可以将程序的输出打印出来,当然它输出了所有IO,为了过滤,可以这样:

strace -p {pid} -ewrite | grep 'write(1,'

这样就可以只过滤标准输出了,当然,并不完美,因为strace只是输出了一部分,如果文字比较多,它会截断,不过我看看进度已经够了,期待有更好的方式出现。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/449743
推荐阅读
相关标签
  

闽ICP备14008679号