Quando você executa ps ... | grep ...
, ps
e grep
são iniciados juntos e a saída de ps
é alimentada para grep
de forma assíncrona. Então, no momento em que ps
varre a lista de processos e imprime a saída, o processo grep
também está ativo e a saída de ps
inclui esse grep
processo também.
Agora, se você fizer um simples grep foo
, a saída de ps
conterá grep foo
e grep
corresponderá a esse foo
:
$ ps aux | grep non-existent
muru 19042 0.0 0.0 10760 2224 pts/8 S+ 23:56 0:00 grep non-existent
Obviamente, não há processo chamado non-existent
.
Em vez de ps | grep
, use pgrep
para uma correspondência mais clara :
pgrep foo
Ou ps
em si, se você souber o nome do comando:
ps -C foo
Por que grep --color...
? Porque o Ubuntu define um apelido para grep
por padrão:
$ alias grep
alias grep='grep --color=auto'
É também por isso que você vê truques idiotas como:
ps ... | grep foo | grep -v grep
ps ... | grep '[f]oo'