> strace w 2>&1 | grep urandom
read(4, "/usr/bin/grep\0urandom\0", 2047) = 22
>
Pourquoi "w" a-t-il besoin d'urandom? Comment éviter cela?
MISE À JOUR:
> strace w 2>&1 | awk '/urandom/'
read(4, "awk\0/urandom/\0", 2047) = 14
>
c'est donc le filtrage qui a quelque chose à voir avec urandom?
> strace who 2>&1 | grep urandom
>
Alors pourquoi "qui" n'est-il pas affecté?
w
ce qui a besoinurandom
. C'est parce quePiped commands run concurrently
: unix.stackexchange.com/questions/37508/…urandom
accès dansw
le code source.grep
et votreawk
. Il n'ouvre pasw
le/dev/urandom
fichier de l' appareil. C'est similaire àps -aux | grep grep
strace w 2>&1 | grep unicorns
;-)Réponses:
Comme expliqué dans d'autres réponses et commentaires, la raison de ce que vous observez est la façon dont
Bash
les tuyaux sont traités. Afin de filtrer ce que vous voulez vraiment dans des situations similaires, vous pouvez essayer d'inclure la première lettre de l'grep
argument[]
comme ceci:ÉDITER:
Comme l'a correctement noté R. dans le commentaire ci-dessous, en fait,
strace
ne voit pas l'autre côté du tuyau. De la même manière,ps aux | grep grep
qui s'affiche égalementgrep grep
dans sa sortie,w
parcourt le/proc
répertoire et y trouve ungrep
processus.la source
strace
ne trace pas (et ne peut pas, de manière simple) les autres commandes du pipeline shell. Au lieu de cela,w
recherche les commandes en cours d'exécution sur votre terminal (et d'autres terminaux) et parcourt le grep dans le cadre de son travail.Depuis la page de manuel
w(1)
:Pour afficher les processus des utilisateurs, il passe par tous les processus en cours d'exécution sur la machine. Essayons ça:
À l'intérieur de la trace, nous trouvons des lignes comme celles-ci (sur un système Linux):
Ce qui montre
w
explicitement passer en revue/proc
et regarder les lignes de commande de tous les processus (et d'autres choses, non illustrées). Il trouve legrep
qui lui est parallèle et c'est cestrace
qu'il voit faire. Le tuyau n'a rien à voir avec cela, à part démarrer les deux processus en même temps. D'une certaine manière, cela revient àps | grep
voir le grep lui-même.who
et la plupart des autres commandes n'ont pas besoin des informations sur les processus, et ne vont pas chercher, donc vous ne voyez pas la même chose lors de leur traçage.la source