私はこのようなパイプラインを持っています:
command1 | command2
両方のコマンドを同時にトレースする方法はありますか?
次の方法で単一のトレースを取得できます。
strace -f sh -c 'command1 | command2'
「-f」は、子プロセスへのフォーク呼び出しを「追跡」します(したがって、command1またはcommand2によって呼び出されるサブコマンドも取得します。これは、必要な場合とそうでない場合があります)。また、 sh
プロセスのトレースも。各プロセスを個別のファイルに出力する場合、「-ff」オプションはサブプロセスをトレースし、次のように「-o」ファイル名にPIDを追加します。
strace -ff -o trace sh -c 'command1 | command2'
これにより、フォークされた子ごとに個別のtrace.<PID>
ファイルが作成されます。
はい、パイプラインの各コマンドの前にstrace
を置き、分析に便利なようにstderrを別のファイルにリダイレクトします。
strace -o trace1.out command1 | strace -o trace2.out command2