有没有办法恢复/恢复nohup以查看控制台中的输出?

时间:2010-11-24 10:45:48

标签: c++ c linux file-descriptor nohup

我知道机会极低,但有办法吗? 看看最近输出的nohup-ed进程是什么?

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

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

干杯

1 个答案:

答案 0 :(得分:8)

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

  1. 使用gdb
  2. 附加到您的流程
  3. 在gdb提示符下运行以下命令,将stdout重定向到/ tmp / newfile

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

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

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

  5. 从您的流程中分离gdb并完成
  6. dup2做的是

      

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