web-dev-qa-db-ja.com

straceをファイルにリダイレクト

Apache2をトレースしようとしています。これらは私が実行しようとしているコマンドです。

ps auxw | grep sbin/Apache | awk '{print"-p " $2}' | xargs strace >> trace.txt

私は試した

(ps auxw | grep sbin/Apache | awk '{print"-p " $2}' | xargs strace ) >> trace.txt

または

ps auxw | grep sbin/Apache | awk '{print"-p " $2}' | xargs strace | xargs >> trace.txt
13
Marin

-oフラグを使用できない特別な理由はありますか?

ps auxw | grep sbin/Apache | awk '{print " -p " $2}' | xargs strace -o /tmp/trace.txt

また、プロセスリストでgrepプロセスをキャッチしないように、いくつかの正規表現のトリックを使用する必要があります。

ps auxw | grep 'sbin/[a]pache' ....

また、Apacheの特定のケースでは、

  1. Apacheは(通常)マルチプロセスですが、親または子の1つを取得しますか? '-f'フラグをstraceに追加すると、(特に)出力にPIDが挿入されます。
  2. メインの親プロセスのプロセスIDは、PIDファイルから取得できます。

    例えばstrace -o /tmp//trace.txt -f $(</path/to/Apache.pid)

だから、それはあなたが尋ねている質問です..しかし、あなたは何をしようとしていますか?起動時にデバッグしますか?リクエストを処理する子プロセスを追跡しますか? Apacheの-Xフラグも確認してください。

15
Rich Homolka

一般に、straceは「ファイルにリダイレクトできます」が、出力をstderrに書き込む(プログラムのstderrと混合する)ため、次のようになります。

strace progname 2>my_strace_output

「すべての出力」をファイルに移動する場合:

strace progname 1>my_strace_output 2>&1

「grep」できるようにしたい場合:

strace progname 2>&1 | grep ...

ただし、grepを実行してファイルに送信する場合は、多くのバッファリングが発生することに注意してください。 https://unix.stackexchange.com/questions/338330/grepping-strace-output-gets-hard

2
rogerdpack
 ps auxw | grep sbin/Apache | awk '{print"-p " $2}' | xargs strace 2>> trace.txt
1
Marin

次のようにして、標準出力をファイルに送ることもできます。

(time /bin/ls) &> /tmp/time.txt

または、phpスクリプトをデバッグする場合:

(strace php /path/to/www/script.php) &> strace_output.txt
0
a coder