Gibt es einen bestimmten Grund, warum Sie das Flag -o nicht verwenden können?
ps auxw | grep sbin/apache | awk '{print " -p " $2}' | xargs strace -o /tmp/trace.txt
Außerdem sollten Sie einen Regex-Trick anwenden, um Ihren grep-Prozess nicht in der Prozessliste zu finden.
ps auxw | grep 'sbin/[a]pache' ....
Denken Sie auch daran, dass im speziellen Fall von Apache
- Apache ist (normalerweise) Multiprozess, wollen Sie den Elternteil oder einen der Kinder bekommen? Ich würde das '-f'-Flag zu strace hinzufügen, das (unter anderem) die PID in die Ausgabe einfügt.
-
Sie können die Prozess-ID des übergeordneten Hauptprozesses aus der PID-Datei abrufen.
z.B. strace -o /tmp//trace.txt -f $(
Das ist also die Frage, die Sie stellen. Aber was versuchen Sie zu tun? Beim Start debuggen? strace einen untergeordneten Prozess, der eine Anfrage bedient? Sehen Sie sich auch das Flag -X für Apache an.
Im Allgemeinen kann strace "in eine Datei umgeleitet werden", aber es schreibt seine Ausgabe auf stderr (mischt es mit der stderr des Programms), also wäre es wie
strace progname 2>my_strace_output
Wenn Sie möchten, dass "alle Ausgaben" in eine Datei gehen:
strace progname 1>my_strace_output 2>&1
wenn Sie es "grep" können möchten:
strace progname 2>&1 | grep ...
Beachten Sie jedoch, dass beim grep und Senden an eine Datei viel Pufferung auftritt:https://unix.stackexchange.com/questions/338330/grepping-strace-output-gets-hard