查看linux中已经运行的进程的输出

时间:2013-01-06 17:20:07

标签: linux process ps

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

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

2 个答案:

答案 0 :(得分:4)

已经有一个程序在linux中使用ptrace(2)来执行此操作, retty

http://pasky.or.cz/dev/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/

答案 1 :(得分:1)

您可以尝试挂钩/proc/[pid]/fd/[012]三联,但可能无效。

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

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