grep -c fornece resultados inconsistentes

2

Estou tentando determinar o número de processos em execução por meio da seguinte linha de comando:

ps aux | grep -c 'Xvfb :1'

Quando o processo "fiji: 1" não está em execução, às vezes recebo um valor 0 e outras vezes um valor de 1. O ato de executar o comando grep parece ser contado às vezes e outras vezes não.

A execução da linha de comando abaixo fornece consistentemente zero processos:

ps aux | grep 'fiji :1' | grep -v grep

Similar a adicionar o grep -v grep , existe uma maneira de fazer com que "grep -c" conte o número de processos rodando menos o comando grep?

ps aux | grep Xvfb dá isto:

60293 17250 0.0 0.1 45052 7016 pts/4 S Sep30 0:02 Xvfb :4 -screen 0 1600x1200x16 
60293 17373 0.0 0.0 40704 2964 pts/0 S Sep30 0:02 Xvfb :5 -screen 0 800x600x16 
60293 29695 0.0 0.1 42996 6112 pts/6 S 13:00 0:00 Xvfb :3 -screen 0 1600x1200x16 
60293 31650 0.0 0.0 61160 756 pts/6 R+ 13:58 0:00 grep Xvfb

pgrep 'Xvfb :3' | wc -l não funciona muito porque retorna 0 quando realmente há um processo em execução.

pgrep 'Xvfb' | wc -l retorna 3, o que está correto.

Eu também tentei pgrep 'Xvfb :3 -screen 0 1600x1200x16' | wc -l e ele retornou incorretamente 0.

Parece que pgrep não gosta do espaço em Xvfb :3 ?

    
por sebastian 01.10.2011 / 22:15

3 respostas

1

Por padrão, pgrep verifica o nome do processo - que, por padrão, é o nome do arquivo executável truncado em 16 bytes. Para verificar a linha de comando completa como em ps aux , use a opção -f .

pgrep -f "Xvfb" | wc -l

Compare: pgrep -l "Xvfb" e pgrep -lf "Xvfb" .

    
por 01.10.2011 / 23:23
0

Eu tentaria

pgrep 'fiji :1' | wc -l

(esperança fiji :1 é o nome do processo)

    
por 01.10.2011 / 22:27
0

A melhor alternativa em que eu estiver em coma até o momento seria filtrar grep da listagem por ps e usar grep como de costume, assim:

ps -N -C grep u | grep -F -c 'kded [kdeinix]'
   ^^^^^^^^^^ not grep
    
por 01.10.2011 / 23:27

Tags