コマンドパイプラインの他の部分を追跡するためにstraceを使用する方法はありますか?

コマンドパイプラインの他の部分を追跡するためにstraceを使用する方法はありますか?

次のパイプラインがあります。

command1 | command2

両方のコマンドを同時に追跡する方法はありますか?

答え1

次のように個々のトレースを取得できます。

strace -f sh -c 'command1 | command2'

"-f" は子プロセスへのフォーク呼び出しに従います。したがって、command1 または command2 によって呼び出されるサブコマンドも取得できます。また、プロセストレースも取得できます。獲得shもできます。各プロセス出力を別々のファイルにしたい場合は、「-ff」オプションは次のようにサブプロセスを追跡し、「-o」ファイル名にPIDを追加します。

strace -ff -o trace sh -c 'command1 | command2'

これにより、trace.<PID>分岐された各子孫ごとに別々のファイルを作成する必要があります。

答え2

はい、straceパイプラインのすべてのコマンドの前に、より簡単な分析のためにstderrを別のファイルにリダイレクトします。

strace -o trace1.out command1 | strace -o trace2.out command2

関連情報