Cómo ver un proceso específico en la parte superior

48

¿Hay opciones relativamente sencillas con la parte superior para rastrear un proceso específico?
¿Idealmente identificando el proceso por un valor legible para el ser humano? por ejemplo chromeo java.

En otras palabras, quiero ver toda la información típica que proporciona Top, pero para que los resultados se filtren a los parámetros proporcionados, es decir. 'cromo' o 'java'

Michael Coleman
fuente
1
has intentado top | grep chrome?
Pandya
1
también puedes usar ps -x | chromepara obtener pid (deja que se muestre pid 2034) y luegotop | grep 2034
Pandya
top | grep chromefuncionó perfectamente, ¡gracias!
Michael Coleman
@Pandya: también, el proceso que estaba buscando solo se ejecutó durante unos segundos (node.js durante una prueba de integración), lo que significaba que cuando solía ps -x | process_nameobtener el PID, cuando ejecutaba el proceso nuevamente, el PID era diferente y, por lo tanto, el El PID original no lo identificaría.
Michael Coleman

Respuestas:

25

Simplemente puede usar grep:

NAME
       grep, egrep, fgrep, rgrep - print lines matching a pattern

SYNOPSIS
       grep [OPTIONS] PATTERN [FILE...]
       grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

DESCRIPTION
       grep  searches  the  named  input  FILEs (or standard input if no files are named, or if a single
       hyphen-minus (-) is given as file name) for lines containing a match to the  given  PATTERN.   By
       default, grep prints the matching lines.

Ejecute el siguiente comando para obtener la salida que desea (ex-chrome):

top | grep chrome

Aquí estamos utilizando grepcon tuberías |de modo topy grepde aplicación en paralelo; topsalida dada a grep(como entrada) y grep chromefiltra las líneas coincidentes chromehasta que se topdetiene.

Pandya
fuente
1
gracias, sé que otras personas tienen sus preferencias, pero me gusta esta respuesta porque es fácil de entender y, por lo tanto, ¡también es más fácil de recordar en el futuro! - Hubiera votado pero no tengo suficiente reputación ...
Michael Coleman
3
Esto solo funciona si el proceso está en la salida mostrada en la parte superior. Creo que la respuesta de @ Ramesh debería ser la aceptada
jb
@JamieBullock topsolo trata la pregunta y OP desea filtrar el proceso en función top.
Pandya
@Pandya en realidad, retiré mi comentario anterior ya que estaba basado en un error en mi código. Aún así, creo que la respuesta de @ Ramesh es mejor (y también filtra el proceso basado en la parte superior). Puedo romper fácilmente el tuyo, por ejemplo, consleep 10 & top | grep sleep
jb
Me gusta unix.stackexchange.com/a/165343/48973 mejor porque muestra los encabezados.
Ryan
39

De mi otra respuesta aquí , podrías hacer algo como,

top -p `pgrep "java"`
Ramesh
fuente
44
top -p `pgrep "java"`me da el siguiente error en un shell bash top: -p requires argument. top -ppgrep -d ',' "apache2" funcionó para mí, pero realmente no entendí lo que estaba haciendo el comando: ¿es una forma de alimentar múltiples argumentos para arriba?
Michael Coleman
@Ramesh necesita dar la pidlista de comas separadas para trabajar.
Kannan Mohan
3
Esta es la respuesta correcta.
j03m
1
+1 Esta es la respuesta correcta. "top | grep Chrome" es bastante bárbaro, porque separa TODA LA SALIDA de la parte superior que no coincide con "Chrome", perdiendo cosas como las etiquetas de encabezado y columna. Usar una subshell con la salida de pgrep es una aplicación correcta de la filosofía de Unix.
John M Naglick
2
@loretoparisi que puede deberse a que el selector que está utilizando coincide con múltiples procesos. Vea esta respuesta para un comando que funciona con uno o más procesos coincidentes.
Michael Hays
21
top -p `pgrep -d "," java`

Explicación:

  1. top -p pid1,pid2: muestra información de proceso múltiple, el pid debe estar separado por ,
  2. pgrep -d "," java: imprime los pids de todos los programas de Java, los pids están separados por una nueva línea de forma predeterminada. use -d ","para separarlo según ,lo requiera la parte superior.

Si ve un error como top: -p argument missing, significa que no se está ejecutando ningún programa Java, es decir, el pgrep no tiene salida.

Mingjiang Shi
fuente
1
Esta solución funciona mejor que usar solo top -p pgrep "java" ``. gracias.
loretoparisi
1
Evite el error comprobando pgrepel código de salida:pids="$(pgrep -d, java)" && top -p "$pids"
syme
12

En OpenBSD top, simplemente presione ge ingrese el nombre del comando que desea filtrar.

En, toppor ejemplo, Ubuntu, presione oe ingrese, por ejemplo, COMMAND=chromepara mostrar solo las entradas de la COMMANDcolumna que sean iguales a chrome.

En Linux que usa la misma topimplementación que Ubuntu, lea la sección FILTRADO en una ventana del topmanual.

Kusalananda
fuente
7

Se han proporcionado otras buenas respuestas, pero hice un script hace algún tiempo, al que llamé ptop, que me sirve bien:

#!/bin/sh
top -p $(pidof "$@" |sed s#\ #,#g) 2>/dev/null
if [ $? -ne 0 ]; then
  echo No processes with the specified name\(s\) were found
fi

Esto admite que se especifiquen varios nombres de proceso (como ptop bash chrome) y proporciona un mensaje de error más agradable en caso de que no haya procesos con ninguno de los nombres especificados en ejecución.

Marcelo
fuente
3

Si desea permanecer topy mantener todos los demás procesos a la vista del contexto, puede presionar Lpara buscar su proceso:

Locate string chrome

Esto resaltará cualquier proceso con chromeel nombre y lo mostrará . Use &para ir al próximo partido.

Puede presionar cpara cambiar entre mostrar el nombre del proceso y el comando completo.

jonatan
fuente
Esto ^ porque la gente RTFM! man top | less +/5d
cprn
0

También puede usar un filtro en la parte superior para aislar procesos específicos. Presione 'O' para que aparezca el indicador del filtro. Luego escriba un filtro formateado como CAMPO = valor. Por ejemplo, para filtrar todos los procesos tmux, use:

COMMAND=tmux

Use '=' para restablecer los filtros. Consulte la sección titulada 'FILTRADO' en la página principal del manual.

Gearoid Murphy
fuente