出力をリダイレクトする方法とbashでそれらを抑制する方法を知っています。ここで、出力リダイレクト部分をコマンドに追加するのを誤って忘れたとします(例:2>&1
または> /tmp/mystdout
)そして私のバックグラウンドプロセスはすでにしばらく実行されていますが、それでもstdout
の場所に変更できますか およびstderr
に書かれていますか?アプリケーションを強制終了して再起動したくないのです。
Gillesがコメントで尋ねたように、より具体的に言うと、これらのシナリオで具体的にいじりたいと思います。
- 間違った出力ファイル
-
stderr
をリダイレクトするのを忘れたstdout
へ
または両方の組み合わせ
例えば。 Apacheを実行していて、見ることができます。 ファイル記述子:
/proc/8019/fd/0 -> /dev/null
/proc/8019/fd/1 -> /dev/null
/proc/8019/fd/2 -> /var/log/apache2/error.log
承認された回答:
reredirect(https://github.com/jerome-pouiller/reredirect/)を使用してこれを行うことができます。
reredirect -m /dev/null <PID>
次のようなものを使用して、後でプロセスの初期出力を復元できます。
reredirect -N -O <M> -E <N> <PID>
(<M>
および<N>
以前のリダイレクトの起動によって提供されます。
README
をリダイレクトする また、別のコマンドにリダイレクトする方法、またはstdoutまたはstderrのみをリダイレクトする方法についても説明します。