ger*_*ijk 19 linux bash io-redirection
我知道如何重定向输出以及如何在 bash 中抑制它们。现在,假设我不小心忘了输出重定向部分的命令(例如追加2>&1或> /tmp/mystdout)和我的后台进程已经运行一段时间,我还可以更改为stdout与stderr正在写入?我真的不想杀死并重新启动应用程序。
更具体地说,正如吉尔斯在他的评论中所问的那样,我想在这些场景中具体地摆弄它:
stderr到stdout或两者的结合
例如,我有 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。