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?

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

Ç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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.