10

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

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

4

2 回答 2

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/

于 2013-01-06T17:59:52.717 回答
1

您可以尝试加入/proc/[pid]/fd/[012]三重奏,但这可能行不通。

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

不幸的是,我想不出一个程序可以精确地完成你想要的,这就是为什么我给你一个关于如何自己编写它的提示。祝你好运!

于 2013-01-06T17:56:09.387 回答