回答:
名前のないパイプは、本来、ファイル記述子を持つアプリケーション専用です。パイプ上のトラフィックを観察または変更する原則的な方法はありません。Linuxでパイプを直接見る方法もないと思います。
ただし、ptraceシステムコールを介して、多かれ少なかれあなたが行っていることを行う、簡単な方法があります。パイプ自体にタックするのではなく、プロセスの1つにタックします。観察するには、たとえばstraceを使用します。
strace -p1234 -s99999 -e write
どこ1234
パイプに書き込みプロセスのプロセスIDです。データの変更は困難ですが、実行できます。最も簡単な方法は、最初に、標準入力を標準出力にコピーする中間プロセスをセットアップし、さらに、注入するデータ(および抑制したいデータを差し引く)を設定することだと思います。2つの名前付きパイプを作成し、一方のパイプでstdinを使用し、もう一方のパイプでstdoutを使用して、中間プロセスを開始します。次に、デバッガー(GDBなど)を使用して、両方のターゲットプロセスをopen
適切な名前付きパイプで実行しdup
、パイプを適切なファイル記述子に配置します。プロセス内のプロセスの1つがクラッシュする可能性があることに注意してください。
(最後の段落がわからなければ申し訳ありませんが、ある程度の技術が必要です。もっと簡単な方法はないと思います。)
パイプの監視に役立ついくつかのツール:
パイプを制御しない、既に実行中のプログラムについては、gdbメソッド:
実行中のプロセスからの出力のリダイレクトを参照してください。
または、straceを使用することもできます。
strace -ewrite -p $PID 2>&1 | grep "write(1"
は、記述子1の呼び出しのみを示しています。「2>&1」は、straceがデフォルトでstderrに書き込むため、stderrをstdoutにリダイレクトします。