我有一个在后台运行的进程(sh脚本),我想知道是否可以查看此进程的输出而不必中断它。
该过程由某些应用程序运行,否则我会将其附加到屏幕上供以后查看。可能需要一个小时才能完成,我想确保它正常运行而没有错误。
答案 0 :(得分:4)
已经有一个程序在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/
答案 1 :(得分:1)
您可以尝试挂钩/proc/[pid]/fd/[012]
三联,但可能无效。
我想到的下一个想法是strace -p [pid]
,但你会得到“prittified”输出。可能的解决方案是使用ptrace(2)
编写一个小程序来挂钩write(2)
并在某处写入数据。 可以正常工作但仅仅在几秒钟内就完成了,特别是如果你不习惯C编程的话。
不幸的是我无法想到一个能完全符合你想要的程序,这就是为什么我给你一个如何自己编写它的提示。祝你好运!