2013-01-06 432 views
10

我有一个在后台运行的进程(sh脚本),我不知道是否可以查看此进程的输出而不必中断它。在linux中查看已经运行的进程的输出

该过程由某个应用程序运行,否则我会将它附加到屏幕上供以后查看。这可能需要一个小时才能完成,我想确保它正常运行且没有错误。

+2

什么类型的输出是:

您也可以用gdb操纵文件描述符?它是纯文本吗?如果是这样,你可以使用“tail -f ”。尾部得到文件的结尾,-f标志告诉它“跟随”文件。 tail命令还有其他选项来指定多少行,并且我认为在轮询文件之间需要等待多长时间。 – Mike

+0

问题是,我没有启动这个过程,它启动了一些应用程序提供商已经启动(cpanel安装程序),并没有他们没有重定向输出到任何文件,否则我会只是用你的尾巴,建议,记住有一种方法来查看输出? –

回答

4

已经有使用ptrace的(2)在Linux中执行此操作的程序,莱蒂

http://pasky.or.cz/dev/retty/

它的工作原理,如果你正在运行的程序已连接到一个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/

1

你可以尝试钩入/proc/[pid]/fd/[012]三元组,但可能无法工作。

下一个弹出我脑海的想法是strace -p [pid],但你会得到“prittified”输出。可能的解决方案是通过编写一个使用ptrace(2)的小程序来钩住write(2)并将数据写入某处。它将工作但不是在几秒钟内完成,特别是如果你不习惯C编程。

不幸的是,我想不出一个程序能够完全符合你的要求,这就是为什么我给你一个如何自己写的提示。祝你好运!

相关问题