En Linux, ¿cómo puedo determinar el número de procesos con la cadena exacta "prueba prueba 123" en cualquier parte del título del proceso?

En Linux, ¿cómo puedo determinar el número de procesos con la cadena exacta "prueba prueba 123" en cualquier parte del título del proceso?

Ya he descubierto esto en Windows, pero se me escapa cómo hacerlo en Linux:

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

Y luego cuento el número de líneas no vacías en el resultado. Esto es muy lento pero funciona. Ahora estoy buscando el método de Linux para hacer lo mismo.

Es decir, "prueba prueba 123" puede ser el título completo del proceso, puede comenzar con él, puede terminar con él o simplemente tenerlo en el medio. Esto es importante.

Respuesta1

TL;DR: usarpgrep -cf "test test 123"


El psprograma enumerará todos los procesos en ejecución. Específicamente, intente:

ps aux 

Ahora, podrías filtrar esa lista usando greppara buscar tu cadena:

ps aux | grep "test test 123"

Eso imprimirá líneas coincidentes. Para contarlos, use grep -cwhich imprime el número de líneas coincidentes:

ps aux | grep -c "test test 123"

El problema con este enfoque es que el grepproceso anterior también aparecerá en los resultados. Por ejemplo, actualmente estoy editando un archivo llamado test test 123, pero si ejecuto el comando anterior, veré tanto el proceso de mi editor de archivos como el grepmismo:

$ 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

Por lo tanto, grep -cregresará 2en lugar de 1:

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

Lo que nos lleva a la herramienta adecuada para el trabajo pgrep. Esta es una herramienta diseñada específicamente para encontrar procesos:

$ pgrep -cf "test test 123"
1

Significa -c"contar las coincidencias" y -fsignifica "buscar en toda la línea de comando, no solo en el nombre del proceso".

El otro truco común para omitir el grepmismo es usar una clase de caracteres de un carácter en lugar de la misma cadena para que la greplínea de comando no contenga la cadena:

$ 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 obtener más información sobre este truco, consulteaquí. Pero esto realmente no es necesario si su sistema tiene pgreplos sistemas Linux.

Respuesta2

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

debería hacer el truco

información relacionada