Por que a saída do ps mostra um processo mesmo se ele não estiver sendo executado?

0

Por que o ps mostra um processo, mesmo que não esteja em execução? Enquanto o Firefox está em execução:

$ echo $(ps aux | awk  '/firefox/{print $2}')
5964 6041

Mas quando o Firefox não está rodando, eu tentei executar o mesmo comando. Mostrou um PID diferente a cada vez.

Eu tentei usar o grepping:

$ ps aux | grep firefox
greenpa+  6056  0.0  0.0  15956   948 pts/11   S+   09:29   0:00 grep --color=auto firefox

O que isso significa?

    
por bolzano 25.04.2015 / 05:45

2 respostas

2

E é por isso que você não deve grep ou analisar a saída de ps para os comandos correspondentes, mas use as ferramentas como pgrep e pidof .

Quando você executa ps | grep foo , o processo grep foo também é listado por ps - portanto, grep foo corresponde a si mesmo com qualquer outro foo processos. A mesma coisa acontece quando você executa echo $(ps aux | awk '/firefox/...) - o comando awk corresponde a si mesmo.

De fato, dependendo da saída que você deseja de ps , talvez seja melhor usar a saída de pgrep com ps . Por exemplo, os estados de todos os processos do Google Chrome no meu sistema:

ps -p $(pgrep -d, chrome) -o pid,state
A flexibilidade de

pgrep nesse sentido é muito útil - note como posso especificar um delimitador de saída com -d e usá-lo como argumento de lista PID para ps . pgrep e pkill também são capazes de ler de um arquivo PID.

    
por muru 25.04.2015 / 05:52
2

Como o muru já apontou grep deixa vestígios de si no ps, no entanto, há uma pequena solução alternativa para usar grep com ps: use aspas duplas e colchetes na primeira letra como ps aux | grep "[f]irefox" (Fonte: link ).

    
por Sergiy Kolodyazhnyy 25.04.2015 / 05:56