No Linux, como determino o número de processos com a string exata “test test 123” em qualquer lugar do título do processo?

No Linux, como determino o número de processos com a string exata “test test 123” em qualquer lugar do título do processo?

Já descobri isso no Windows, mas como fazer isso no Linux me escapa:

tasklist /V /NH | find "test test 123"

E então conto o número de linhas não vazias na saída. Isso é muito lento, mas funciona. Agora estou procurando o método Linux para fazer o mesmo.

Ou seja, "teste teste 123" pode ser o título completo do processo, pode começar com ele, pode terminar com ele ou apenas tê-lo no meio. Isso é importante.

Responder1

DR: usarpgrep -cf "test test 123"


O psprograma listará todos os processos em execução. Especificamente, tente:

ps aux 

Agora, você pode simplesmente filtrar essa lista usando greppara procurar sua string:

ps aux | grep "test test 123"

Isso imprimirá linhas correspondentes. Para contá-los, use grep -cwhich imprime o número de linhas correspondentes:

ps aux | grep -c "test test 123"

O problema desta abordagem é que o grepprocesso acima também aparecerá nos resultados. Por exemplo, estou editando um arquivo chamado test test 123, mas se eu executar o comando acima, verei o processo do meu editor de arquivos e o greppróprio:

$ ps aux | grep  "test test 123"
terdon   2461453 22.0  0.2 392944 79796 pts/1    Sl   15:53   0:02 emacs test test 123
terdon   2462354  0.0  0.0   8832  2292 pts/1    S+   15:53   0:00 grep --color test test 123

Portanto, o grep -cretornará 2em vez de 1:

$ ps aux | grep -c "test test 123"
2

O que nos leva à ferramenta certa para o trabalho, pgrep. Esta é uma ferramenta projetada especificamente para encontrar processos:

$ pgrep -cf "test test 123"
1

Os -cmeios "contar as correspondências" e os -fmeios "pesquisar toda a linha de comando, não apenas o nome do processo".

O outro truque comum para pular o greppróprio é usar uma classe de caracteres de um caractere em vez da mesma string para que a greplinha de comando não contenha a string:

$ ps aux | grep  "test test 123"
terdon   2461453  1.2  0.2 392944 79796 pts/1    Sl   15:53   0:02 emacs test test 123
terdon   2476971  0.0  0.0   8832  2236 pts/1    S+   15:56   0:00 grep --color test test 123
$ ps aux | grep  "[t]est test 123"
terdon   2461453  1.2  0.2 392944 79796 pts/1    Sl   15:53   0:02 emacs test test 123
$ ps aux | grep -c "[t]est test 123"
1

Para saber mais sobre esse truque, vejaaqui. Mas isso realmente não é necessário se o seu sistema tiver pgrepos sistemas Linux.

Responder2

echo $(( $(ps aux | grep "test test 123" | wc -l) - 1))

deveria para o truque

informação relacionada