web-dev-qa-db-ja.com

straceを使用してコマンドパイプラインのさまざまな部分をトレースする方法はありますか?

私はこのようなパイプラインを持っています:

command1 | command2

両方のコマンドを同時にトレースする方法はありますか?

1
codeforester

次の方法で単一のトレースを取得できます。

strace -f sh -c 'command1 | command2'

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

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

これにより、フォークされた子ごとに個別のtrace.<PID>ファイルが作成されます。

4
Alex Tullenhoff

はい、パイプラインの各コマンドの前にstraceを置き、分析に便利なようにstderrを別のファイルにリダイレクトします。

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