我有一个在后台运行的进程(sh脚本),我不知道是否有可能查看这个进程的输出,而不必中断它。
这个过程由一些应用程序运行,否则我会把它附加到屏幕上供以后查看。 这可能需要一个小时才能完成,我想确保它正常运行,没有错误。
已经有一个程序在linux中使用ptrace(2)来做到这一点, retty :
如果你正在运行的程序已经连接到一个tty,那么它是有效的,如果你在后台运行你的程序,我不知道它是否会工作。
至少它可以给出一些好的提示。 🙂
你可以使用ptrace(2)
从程序中退出代码,否则用gdb -p <pid>
附加进程,程序死机时会打印出来。
你也可以使用gdb操作文件描述符:
(gdb) p close(1) $1 = 0 (gdb) p creat("/tmp/stdout", 0600) $2 = 1
http://etbe.coker.com.au/2008/02/27/redirecting-output-from-a-running-process/
你可以尝试钩入/proc/[pid]/fd/[012]
三元组,但是可能不行。
我想到的下一个想法是strace -p [pid]
,但是你会得到“prittified”输出。 可能的解决方案是通过使用ptrace(2)
编写一个小程序钩住write(2)
并将数据写入某个地方。 它会工作,但不会在几秒钟内完成,特别是如果你不习惯C编程。
不幸的是,我想不出一个完全符合你想要的程序,这就是为什么我给你一个如何写你自己的暗示。 祝你好运!