stdout
が_/dev/null
_にリダイレクトされている実行中のプロセスのstdout
をキャプチャしたいと思います。システムコールfcntl()
を使用してみましたが、fd "1"を閉じると、使用可能な最小のfd番号であるため、他のファイルに割り当てられていました。
与えられたfdをロックして他のファイルに再割り当てする方法はありますか?
Procファイルシステムを使用してそれをキャプチャできると思います。
$ cat /proc/<PID>/fd/1
gdb
を使用してそれを行うことができると思います。 このstackoverflowの質問 に対する回答のいくつかを参照してください。それは このブログ記事 から来るかもしれないようです。
Reredirect( https://github.com/jerome-pouiller/reredirect/ )を使用してそれを行うことができます。
reredirect -m /dev/null <PID>
次のようなものを使用して、後でプロセスの初期出力を復元できます。
reredirect -N -O <M> -E <N> <PID>
(<M>
および<N>
は、以前のリダイレクトの起動によって提供されます)。
reredirect README
は、別のコマンドにリダイレクトする方法についても説明しています。