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
-oフラグを使用できない特別な理由はありますか?
ps auxw | grep sbin/Apache | awk '{print " -p " $2}' | xargs strace -o /tmp/trace.txt
また、プロセスリストでgrepプロセスをキャッチしないように、いくつかの正規表現のトリックを使用する必要があります。
ps auxw | grep 'sbin/[a]pache' ....
また、Apacheの特定のケースでは、
メインの親プロセスのプロセスIDは、PIDファイルから取得できます。
例えばstrace -o /tmp//trace.txt -f $(</path/to/Apache.pid)
だから、それはあなたが尋ねている質問です..しかし、あなたは何をしようとしていますか?起動時にデバッグしますか?リクエストを処理する子プロセスを追跡しますか? Apacheの-Xフラグも確認してください。
一般に、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
ps auxw | grep sbin/Apache | awk '{print"-p " $2}' | xargs strace 2>> trace.txt
次のようにして、標準出力をファイルに送ることもできます。
(time /bin/ls) &> /tmp/time.txt
または、phpスクリプトをデバッグする場合:
(strace php /path/to/www/script.php) &> strace_output.txt