回答:
これは、通信メカニズムに大きく依存します。
スペクトルの最も透過的な最後で、プロセスはインターネットソケット(IP)を使用して通信できます。その後、wiresharkまたはtcpdumpは、ループバックインターフェイスを指すことですべてのトラフィックを表示できます。
中間レベルでは、システム追跡のスイス軍チェーンソーである/ / / ...を使用して、パイプとUNIXソケットのトラフィックを監視できます。ただし、これによりプロセスが大幅に遅くなる可能性があるため、プロファイリングには適さない場合があります。truss
strace
trace
スペクトルの最も不透明な端には、共有メモリがあります。共有メモリの基本的な動作原理は、関連する各プロセスでアクセスが完全に透過的であり、共有メモリ領域を設定するためのシステムコールのみが必要であるということです。特にタイミングを乱さないために観測が必要な場合は、これらのメモリアクセスを外部から追跡するのは困難です。Linuxトレースツールキット(カーネルパッチが必要)などのツールを試して、有用な情報を抽出できるかどうかを確認できます。これは、Solarisがより優れたツールを持っていると私が期待するような分野です(しかし、私はそれについて知りません)。
ソースがある場合、最良のオプションは、主要なライブラリ関数にトレースステートメントを追加することです。これはLD_PRELOAD
、共有メモリにアクセスするプログラムの一部の制御フローを十分に理解している限り、(全体の)ソースがなくてもトリックで達成できる場合があります。
これにより、プロセスが読み書きする内容が表示されます。
strace -ewrite -p $PID
出力はきれいではありません(write(#、)のような行が表示されます)が、動作します!(そして、単一行:D)また、引数が省略されているという事実を嫌うかもしれません。これを制御するには、表示される文字列の最大長を設定する-sパラメーターを使用します。
すべてのストリームをキャッチするため、何らかの方法でフィルタリングすることをお勧めします。
あなたはそれをフィルタリングすることができます:
strace -ewrite -p $PID 2>&1 | grep "write(1"
記述子1呼び出しのみを示します。2>&1は、straceがデフォルトでstderrに書き込むため、stderrをstdoutにリダイレクトします。