Nějaký konkrétní důvod, proč nemůžete použít parametr -o?
ps auxw | grep sbin/apache | awk '{print " -p " $2}' | xargs strace -o /tmp/trace.txt
Také byste měli použít nějaký trik s regulárním výrazem, abyste nezachytili proces grep v seznamu procesů.
ps auxw | grep 'sbin/[a]pache' ....
Pamatujte také, že v konkrétním případě Apache,
- Apache je (obvykle) víceprocesový, chcete získat rodiče nebo jedno z potomků? Do strace bych přidal příznak '-f', který (mimo jiné) vkládá PID do výstupu.
-
ID procesu hlavního nadřazeného procesu můžete získat ze souboru PID.
např. strace -o /tmp//trace.txt -f $(
Tak to je otázka, kterou se ptáš, ale co se snažíš dělat? Ladit při spuštění? sledovat podřízený proces obsluhující požadavek? Podívejte se také na příznak -X pro apache.
Obecně platí, že strace "lze přesměrovat do souboru", ale zapíše svůj výstup do stderr (smíchá ho se stderr programu), takže by to bylo jako
strace progname 2>my_strace_output
Pokud chcete, aby se „veškerý výstup“ přesunul do souboru:
strace progname 1>my_strace_output 2>&1
pokud to chcete mít možnost "grep":
strace progname 2>&1 | grep ...
mějte však na paměti, že pokud grep a pošlete jej do souboru, dojde k velkému množství ukládání do vyrovnávací paměti:https://unix.stackexchange.com/questions/338330/grepping-strace-output-gets-hard