Une raison particulière pour laquelle vous ne pouvez pas utiliser le drapeau -o ?
ps auxw | grep sbin/apache | awk '{print " -p " $2}' | xargs strace -o /tmp/trace.txt
En outre, vous devez utiliser une astuce regex pour ne pas attraper votre processus grep dans la liste des processus.
ps auxw | grep 'sbin/[a]pache' ....
Rappelez-vous également que dans le cas spécifique d'Apache,
- Apache est (généralement) multiprocessus, voulez-vous obtenir le parent ou l'un des enfants ? J'ajouterais le drapeau '-f' à strace, qui (entre autres choses) insère le PID dans la sortie.
-
Vous pouvez obtenir l'ID de processus du processus parent principal à partir du fichier PID.
par exemple. strace -o /tmp//trace.txt -f $(
Donc, c'est la question que vous posez .. mais qu'essayez-vous de faire? Debug au démarrage ? tracer un processus enfant servant une requête ? Regardez aussi le drapeau -X pour apache.
En général, strace "peut être redirigé vers un fichier" mais il écrit sa sortie sur stderr (en le mélangeant avec le stderr du programme), donc ce serait comme
strace progname 2>my_strace_output
Si vous voulez que "toutes les sorties" aillent dans un fichier :
strace progname 1>my_strace_output 2>&1
si vous voulez pouvoir le "grep":
strace progname 2>&1 | grep ...
cependant, sachez que si vous grep et l'envoyez dans un fichier, de nombreuses mises en mémoire tampon se produisent :https://unix.stackexchange.com/questions/338330/grepping-strace-output-gets-hard