我有一个在后台运行的进程(sh脚本),我想知道是否可以在不打断它的情况下查看此进程的输出。
该进程由某个应用程序运行,否则我将把它连接到屏幕以供稍后查看。这可能需要一个小时才能完成,我想确保它正常运行且没有错误。
我有一个在后台运行的进程(sh脚本),我想知道是否可以在不打断它的情况下查看此进程的输出。
该进程由某个应用程序运行,否则我将把它连接到屏幕以供稍后查看。这可能需要一个小时才能完成,我想确保它正常运行且没有错误。
已经有一个在Linux中使用ptrace(2)来实现此功能的程序,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/
你可以尝试钩入/proc/[pid]/fd/[012]
三元组,但很可能不起作用。
我脑海中浮现的下一个想法是strace -p [pid]
,但你会得到“漂亮”的输出。可能的解决方案是通过使用ptrace(2)
编写一个小程序来跟踪自己,以钩入write(2)
并将数据写入某个地方。它会起作用,但如果你不习惯C编程,这并不是一件轻松的事情。
不幸的是,我想不出一个能够精确满足你要求的程序,这就是为什么我给你一个提示,告诉你如何自己编写它。祝你好运!