我有一个在后台运行的进程(sh脚本),我不知道是否可以查看此进程的输出而不必中断它。在linux中查看已经运行的进程的输出
该过程由某个应用程序运行,否则我会将它附加到屏幕上供以后查看。这可能需要一个小时才能完成,我想确保它正常运行且没有错误。
我有一个在后台运行的进程(sh脚本),我不知道是否可以查看此进程的输出而不必中断它。在linux中查看已经运行的进程的输出
该过程由某个应用程序运行,否则我会将它附加到屏幕上供以后查看。这可能需要一个小时才能完成,我想确保它正常运行且没有错误。
已经有使用ptrace的(2)在Linux中执行此操作的程序,莱蒂:
它的工作原理,如果你正在运行的程序已连接到一个TTY,我不知道如果你在后台运行你的程序,它是否会工作。
至少它可能会提供一些很好的提示。 :)
您可能使用ptrace(2)
从程序中检索退出代码,否则只需附加到使用gdb -p <pid>
的进程,并在程序死亡时打印。
(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编程。
不幸的是,我想不出一个程序能够完全符合你的要求,这就是为什么我给你一个如何自己写的提示。祝你好运!
什么类型的输出是:
您也可以用gdb操纵文件描述符?它是纯文本吗?如果是这样,你可以使用“tail -f
问题是,我没有启动这个过程,它启动了一些应用程序提供商已经启动(cpanel安装程序),并没有他们没有重定向输出到任何文件,否则我会只是用你的尾巴,建议,记住有一种方法来查看输出? –