如何更改正在运行的进程的输出重定向?

ger*_*ijk 19 linux bash io-redirection

我知道如何重定向输出以及如何在 bash 中抑制它们。现在,假设我不小心忘了输出重定向部分的命令(例如追加2>&1> /tmp/mystdout)和我的后台进程已经运行一段时间,我还可以更改为stdoutstderr正在写入?我真的不想杀死并重新启动应用程序。

更具体地说,正如吉尔斯在他的评论中所问的那样,我想在这些场景中具体地摆弄它:

  • 错误的输出文件
  • 忘记重定向stderrstdout

或两者的结合

例如,我有 Apache 运行,我可以看到文件描述符:

/proc/8019/fd/0 -> /dev/null
/proc/8019/fd/1 -> /dev/null
/proc/8019/fd/2 -> /var/log/apache2/error.log
Run Code Online (Sandbox Code Playgroud)

Jér*_*ler 12

您可以使用 reredirect ( https://github.com/jerome-pouiller/reredirect/ ) 来完成。

reredirect -m /dev/null <PID>
Run Code Online (Sandbox Code Playgroud)

您可以稍后使用以下内容恢复流程的初始输出:

reredirect -N -O <M> -E <N> <PID>
Run Code Online (Sandbox Code Playgroud)

<M>并且<N>由之前启动的重定向提供)。

reredirectREADME还解释了如何重定向到另一个命令或仅重定向 stdout 或 stderr。