tuyauterie strace à grep

30

J'essaie de faire fonctionner la stracecuve cczeet le tuyau ne fonctionne pas comme prévu.

La ligne de commande que j'exécute pour tester est sudo strace -p $(pgrep apache2) | grep open, et toutes les lignes sont sorties, ignorant grep.

Y a-t-il quelque chose de spécial stracequi provoque ce comportement?

Andrei
la source

Réponses:

48

straceimprime ses traces sur l'erreur standard, pas sur la sortie standard. C'est parce qu'il est courant de vouloir rediriger la sortie standard du programme, mais généralement ce n'est pas un problème que le stderr de strace et le stderr du programme soient mélangés.

Vous devez donc rediriger stracele stderr de stdrr vers stdout pour pouvoir le diriger:

sudo strace -p $(pgrep apache2) 2>&1 | grep open

sauf que ce que vous cherchez vraiment c'est

sudo strace -p $(pgrep apache2) -e open
Gilles, arrête de faire le mal
la source
Ça marche!! Je vous remercie! - Je n'essayais pas de regarder uniquement les openappels, je mets juste cela comme exemple, ce que j'essaie vraiment de faire, c'est la surbrillance des couleurs
Andrei
Je reçois strace: Invalid process id: '-e'la dernière commande. Je suis sur la version 4.8. 2010-03-30.
Elijah Lynn
Ahh, j'ai en fait httpd (RHEL).
Elijah Lynn
1
@ElijahLynn Remplacez apache2par le nom du processus qui vous intéresse. Vérifiez que pgrepimprime un seul PID, sinon choisissez-en un et exécutez par exemplesudo strace -p 1234 -e open
Gilles 'SO- arrête d'être mauvais'
@Andrei, qu'en est-il de l'utilisation de la vimcoloration syntaxique? strace $CMD 2>&1 > /dev/null | vim -c ':set syntax=strace' -.
Pablo A