
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 ps
programa enumerará todos los procesos en ejecución. Específicamente, intente:
ps aux
Ahora, podrías filtrar esa lista usando grep
para buscar tu cadena:
ps aux | grep "test test 123"
Eso imprimirá líneas coincidentes. Para contarlos, use grep -c
which imprime el número de líneas coincidentes:
ps aux | grep -c "test test 123"
El problema con este enfoque es que el grep
proceso 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 grep
mismo:
$ 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 -c
regresará 2
en 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 -f
significa "buscar en toda la línea de comando, no solo en el nombre del proceso".
El otro truco común para omitir el grep
mismo es usar una clase de caracteres de un carácter en lugar de la misma cadena para que la grep
lí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 pgrep
los sistemas Linux.
Respuesta2
echo $(( $(ps aux | grep "test test 123" | wc -l) - 1))
debería hacer el truco