¿Cómo busco un proceso por nombre sin usar grep?

62

Para buscar un proceso que pueda usar pscon grep.

Por ejemplo para buscar firefox

ps aux | grep firefox

¿Cómo obtener la misma respuesta sin usar grep?

Maythux
fuente
1
Tengo curiosidad por qué querrías hacer esto, dado que la ps/grepsolución funciona tan bien.
neuronet el
OP solo quiere un comando más corto, supongo. Si hubiera algo así ps -n <process name>, respondería a su necesidad. ps -n firefoxes un poco más corto que ps | grep firefox. psya puede filtrar pido procesar una identificación de usuario, por lo que es una pregunta razonable filtrar por nombre de proceso.
Jochem Schulenklopper

Respuestas:

71

El pgrepcomando, y su hermano pkill, existe precisamente para este propósito:

  • pgrep firefox enumerará todos los procesos cuyos comandos coinciden firefox
  • pgrep -f firefox enumerará todos los procesos cuyas líneas de comando completas coincidan firefox
  • pgrep -x firefox enumerará todos los procesos cuyos comandos coinciden exactamente firefox
  • ... y así.

Y, naturalmente, pgrepse excluirá del combate, por lo que no se necesita ninguno de los greprituales asociados ps | grep.


El otro conjunto de herramientas para esto son los comandos pidofy killall. Estos no son tan flexibles como pgrepy pkill.

  • pidof firefox enumerará los procesos cuyo comando es firefox
muru
fuente
24
ps -fC process-name

ejemplo:

ps -fC firefox

de man ps

  -C cmdlist      Select by command name.
                       This selects the processes whose executable name is
                       given in cmdlist.


 -f              Do full-format listing. This option can be combined
                       with many other UNIX-style options to add additional
                       columns. It also causes the command arguments to be
                       printed. When used with -L, the NLWP (number of
                       threads) and LWP (thread ID) columns will be added. See
                       the c option, the format keyword args, and the format
                       keyword comm.
Maythux
fuente
Esta es la mejor respuesta, pero desafortunadamente no funciona en OSX. El ps -Cindicador BSD se comporta de manera completamente diferente: "Cambia la forma en que se calcula el porcentaje de CPU"
mastaBlasta
2

tople permite buscar cadenas cuando toca mayúsculas L; el proceso se resaltará y use las teclas de flecha hacia arriba y hacia abajo para desplazarse por la lista de procesos. Del mismo modo, el htopcomando permite resaltar un proceso particular cuando golpeas /. Y \filtrará todos los procesos con una cadena particular en el nombre.

Para aquellos que gustan awk, aquí hay un oneliner awk: ps -eF | awk '/process-name/ {print $11}' . Con el ps -eFnombre del proceso siempre está en la undécima columna. Alternativamente, si lo hace ps -eF | awk '{print $11}' | sort, obtendrá una lista ordenada de nombres de procesos, ordenados alfabéticamente. Conéctelo al lesscomando solo para ver la larga lista de archivos más fácilmente.

Sergiy Kolodyazhnyy
fuente
2

Un truco genial

$ps -ejH

Obtendrás todos los procesos con nombres

exmple:
1747   568   568 ?        00:00:00   colord
1833  1832  1832 ?        00:00:00   gnome-keyring-d
2263   568   568 ?        00:00:00   udisksd
2311  2311  2311 ?        00:00:00   cupsd
2315  2315  2311 ?        00:00:00     dbus

Redirige o copia el resultado a un archivo y luego ábrelo nano, presiona Ctrl+ W y puedes buscar el nombre que deseas.

daniel
fuente
1

También puede usar htopy luego presionar F4 para filtrar los resultados con una cadena coincidente definida por el usuario. También tiene una función de búsqueda personalizada disponible presionando F3.

JoErNanO
fuente
1

Si el problema son dos procesos, solo puede usar grep:

grep firefox /proc/*/cmdline
usuario1497298
fuente
0

Acabo de leer este ps alias en el blog de Lennart Poettering. La salida está de acuerdo con la crianza del grupo de control systemd:

alias psc='ps xawf -eo pid,user,cgroup,args'
DDPenga
fuente