> strace w 2>&1 | grep urandom
read(4, "/usr/bin/grep\0urandom\0", 2047) = 22
>
Por que "w" precisa de urandom? Como evitar isso?
ATUALIZAR:
> strace w 2>&1 | awk '/urandom/'
read(4, "awk\0/urandom/\0", 2047) = 14
>
então é a filtragem que tem algo a ver com urandom?
> strace who 2>&1 | grep urandom
>
Então, por que "quem" não é afetado?
w
que precisaurandom
. É porquePiped commands run concurrently
: unix.stackexchange.com/questions/37508/…urandom
acesso now
código fonte.grep
e seuawk
. Não estáw
abrindo o/dev/urandom
arquivo do dispositivo. É semelhante aps -aux | grep grep
strace w 2>&1 | grep unicorns
;-)Respostas:
Conforme explicado em outras respostas e comentários, o motivo pelo qual você observa é a maneira como
Bash
lida com os tubos. Para filtrar o que você realmente deseja em situações semelhantes, tente colocar a primeira letra dogrep
argumento da[]
seguinte maneira:EDITAR:
Como corretamente observado por R. no comentário abaixo, na verdade
strace
, não vê o outro lado do tubo. Da mesma formaps aux | grep grep
que também mostragrep grep
em sua saída,w
está percorrendo o/proc
diretório e encontra ogrep
processo lá.fonte
strace
não (e não pode, de maneira fácil) rastrear os outros comandos no pipeline do shell. Em vez disso,w
está procurando os comandos atuais sendo executados no seu terminal (e em outros terminais) e é executado no grep como parte de seu trabalho.Na página de manual
w(1)
:Para exibir os processos dos usuários, ele passa por todos os processos em execução na máquina. Vamos tentar isso:
Dentro do rastreamento, encontramos linhas como estas (em um sistema Linux):
O que mostra
w
explicitamente percorrer/proc
e examinar as linhas de comando de todos os processos (e outras coisas, não mostradas). Ele encontra ogrep
que corre paralelo a ele e é isso questrace
ele vê. O pipe não tem nada a ver com isso, além de iniciar os dois processos ao mesmo tempo. De certa forma, é semelhante aps | grep
ver o próprio grep.who
e a maioria dos outros comandos não precisa das informações sobre os processos e não procura, portanto você não vê o mesmo ao rastreá-los.fonte