8

我知道机会非常低,但是有没有办法查看 nohup-ed 进程最近输出了什么?

我仍然打开这个进程,但我已经将所有输出重定向到 /dev/null 来运行它。

那么有没有办法将这样的过程恢复到控制台,或者它是无望的:(

干杯

4

1 回答 1

8

有一种方法,但它不是直截了当的,诀窍是使用 dup2 并取决于您的程序与 libc 链接的事实(所有 c/c++ 应用程序都将是,但 java 应用程序不会是例如)

  1. 使用 gdb 附加到您的进程
  2. 在 gdb 提示符下运行以下命令将标准输出重定向到 /tmp/newfile

    $ print dup2(open("/tmp/newfile",0), 1)

  3. 运行以下命令将 stderr 重定向到 /tmp/newfile

    $ print dup2(open("/tmp/newfile",0), 2)

  4. 将 gdb 从您的流程中分离出来并完成

dup2所做的是

复制文件描述符 这意味着 stdout/stderr(1 和 2)和从 open 返回的新文件描述符可以互换使用,这将导致所有输出到 stdout 和 stderr 到您打开的文件。

于 2010-11-24T10:55:58.457 回答