web-dev-qa-db-ja.com

/ dev / nullにリダイレクトされた実行中のプロセスのstdoutをキャプチャする方法

stdoutが_/dev/null_にリダイレクトされている実行中のプロセスのstdoutをキャプチャしたいと思います。システムコールfcntl()を使用してみましたが、fd "1"を閉じると、使用可能な最小のfd番号であるため、他のファイルに割り当てられていました。

与えられたfdをロックして他のファイルに再割り当てする方法はありますか?

5

Procファイルシステムを使用してそれをキャプチャできると思います。

$ cat /proc/<PID>/fd/1

3
pradeepchhetri

gdbを使用してそれを行うことができると思います。 このstackoverflowの質問 に対する回答のいくつかを参照してください。それは このブログ記事 から来るかもしれないようです。

2
Bruce Ediger

Reredirect( https://github.com/jerome-pouiller/reredirect/ )を使用してそれを行うことができます。

reredirect -m /dev/null <PID>

次のようなものを使用して、後でプロセスの初期出力を復元できます。

reredirect -N -O <M> -E <N> <PID>

<M>および<N>は、以前のリダイレクトの起動によって提供されます)。

reredirect READMEは、別のコマンドにリダイレクトする方法についても説明しています。

0