Função do segundo grep em 'ps | grep -v | grep

1
ps aux  | grep firefox

Lista todos os processos com a string "firefox"

ps aux  | grep -v firefox

Lista todos os processos sem a string "firefox"

ps aux | grep -v grep | grep firefox ?

O que esse segundo grep faz? grep em si é um comando, então por que estamos usando outro grep?

    
por Kranthi Kiran 12.07.2016 / 12:47

3 respostas

6

O comando ps gerará todos os seus processos atualmente em execução. O primeiro grep removerá o processo grep dessa lista. O segundo extrairá qualquer processo firefox na lista filtrada.

Esta é provavelmente uma tentativa parcial de obter o ID do processo (PID) do processo firefox , possivelmente apenas para ver se está sendo executado ou para finalizá-lo.

Se esse for o caso, aconselho strongmente que você use pgrep (ou pkill , se a finalização do processo for posterior):

if pgrep firefox 2>/dev/null; then
  echo "firefox is already running"
else
  echo "starting firefox..."
  firefox &
done

Para finalizar firefox :

pkill firefox

Ou seja, não percorre o caminho mais longo para encontrar seu PID primeiro.

Veja também os manuais de pgrep e pkill em seu sistema.

    
por 12.07.2016 / 12:59
6

Quando você faz um comando como

ps aux  | grep firefox

Então o grep process em si pode aparecer na saída porque a palavra que você está procurando está presente. por exemplo. na minha máquina eu corro chrome e os resultados semelhantes:

% ps aux | grep chrome
sweh      3384  0.0  0.0  11128  1024 pts/1    S+   07:08   0:00 grep chrome
sweh     23698  0.0  0.0   6384   620 ?        S    Jul04   0:00 /usr/lib/chromi

Podemos ver que o processo 3384 é o comando grep e corresponde porque a palavra chrome é exibida.

Para evitar isso, algumas pessoas adicionam um segundo | grep -v grep para remover essa linha.

Existe um cheat embora ...

ps aux | grep '[f]irefox'

grep '[f]irefox' corresponde exatamente às mesmas linhas que grep firefox , mas agora o comando grep nunca se igualará porque a palavra não aparece literalmente nesse comando.

    
por 12.07.2016 / 13:11
1

Analisando ps aux | grep -v grep | grep firefox

ps aux fornecerá a saída dos processos. O primeiro grep ( grep -v grep ) removerá qualquer linha que será alimentada nele a partir de ps aux que conterá a palavra grep . Depois a saída será novamente retornada ( grep firefox ) para a palavra firefox e fornecerá a saída.

    
por 12.07.2016 / 12:56

Tags