Si llama al comando superior, obtiene todos los procesos en ejecución. Pero, ¿cómo puedo limitar la salida solo a un determinado nombre de proceso como "java" ?
He probado este top -l 2 | grep java, pero de esta manera solo obtiene instantáneas y no una lista actualizada continuamente. Y arriba -l 0 | grep java no es muy claro.
Respuestas:
Prefiero lo siguiente para poder usar top de forma interactiva sin tener que buscar los pids cada vez que lo ejecuto:
Por supuesto, si los procesos cambian, tendrá que volver a ejecutar el comando.
Explicación:
pgrep process-name
devuelve una lista de identificadores de proceso que están separados por líneas nuevastr "\\n" ","
traduce estas nuevas líneas en comas, porque la parte superior quiere una lista separada por comas de identificadores de procesosed
es un editor de transmisiones ysed 's/,$//'
se usa aquí para eliminar la coma al finalfuente
top: pid limit (20) exceeded
. ¿Existe de todos modos alrededor de ese límite?top -p $(pgrep process-name | head -20 | tr "\\n" "," | sed 's/,$//')
. Esto mostrará datos de hasta los primeros 20 PID devueltos porpgrep
.-pid
lugar de-p
.Busque los pids de los procesos que desea monitorear y luego use la
-p
opción que le permite proporcionar una lista de pids altop
comando.Ejemplo:
(Creo que también puede pasar una lista separada por comas).
fuente
¿qué tal top -b | grep java
fuente
Ampliando la respuesta de @ dogbane , puede obtener todos los PID para un proceso con nombre
pgrep
para hacer lo siguiente:fuente
top -p "$(pgrep -d ',' php)" top: pid limit (20) exceeded
man top
dice "Esta opción se puede dar hasta 20 veces, o puede proporcionar una lista delimitada por comas con hasta 20 pids". Bueno, maldición.Usa el comando de vigilancia
fuente
man watch
"el reloj ejecuta el comando repetidamente, mostrando su salida y errores "; no muestra los procesos actualmente en ejecución como lotop
hacewatch -d 'top -b -n1 | grep mysql'
Usando la respuesta de aquí pude crear una línea
Esto me funciona en MacOS 10.12 (Sierra)
fuente
Resolví mi problema usando:
en este caso: -n se usa para establecer cuántas veces top será qué proceso
y -b se usa para mostrar todos los pids
evita errores como: top: límite pid (20) excedido
fuente
El siguiente código actualiza una lista de procesos cada 5 segundos mediante el comando watch:
watch -n 5 -t top -b -n 1 -p$(pgrep java | head -20 | tr "\\n" "," | sed 's/,$//')
fuente
Lo ejecuto (por ejemplo):
top -b | egrep -w 'java|mysqld'
fuente
Supongamos ... si tenemos más de 20 procesos ejecutándose en el servidor con el mismo nombre ... esto no ayudará
top -p
pgrep oracle | head -n 20 | tr "\\n" "," | sed 's/,$//'
Intentará enumerar y proporcionar una salida en tiempo real de 20 procesos en los que tenemos buenas posibilidades de perder otros procesos que consumen más recursos ...
Todavía estoy buscando una mejor opción en esto.
fuente
Un caso más específico, como el que realmente estaba buscando:
Para los procesos de Java, también puede usar,
jps -q
por lo que jps es una herramienta de $ JAVA_HOME / bin y, por lo tanto, debería estar en su $ PATH.fuente
Vine aquí buscando la respuesta a esto en OSX. Terminé obteniendo lo que quería con bash y awk:
Hago un bucle superior en el modo de registro y lo filtro con awk, creando una matriz asociativa a partir de la salida de pgrep. Awk imprime las primeras 12 líneas, donde la línea 12 son los encabezados de columna, y luego cada línea que tiene un pid que es una clave en la matriz. El archivo de volcado se utiliza para un bucle más visualizable.
fuente
solo
top -bn 1 | grep java
hará el truco por tifuente
Ejecutar lo siguiente dará una actualización continua en la consola:
fuente
Aquí está la única solución hasta ahora para MacOS:
aunque esto informará indeseablemente
invalid option or syntax: -pid
si no hayjava
procesos vivos.EXPLICACIÓN
Las otras soluciones publicadas aquí usan el formato
top -p id1,id2,id3
, pero MacOStop
solo admite el formato difícil de manejartop -pid id1 -pid id2 -pid id3
.Entonces, en primer lugar, obtenemos la lista de identificadores de proceso que tienen el nombre de proceso "java":
y canalizamos esto a lo
awk
que une los resultados con delimitador" -pid "
¡Ay, esto deja un delimitador final! Por ejemplo, es posible que hasta ahora hayamos obtenido la cadena
"123 -pid 456 -pid 789 -pid "
.Luego solo usamos
sed
para recortar los 6 caracteres finales del delimitador.Estamos listos para pasar los resultados a
top
:fuente
obtener el pid del proceso:
decirle a la parte superior qué pid (s) de proceso mostrar
ejemplo:
Top solo mostrará los 2 procesos 'konsole'. Esto es útil en un servidor ocupado a través de ssh, sin tener que pasar por grep.
fuente
Usando el enfoque mencionado en la respuesta de Rick Byers:
pero tenía más de 20 procesos en ejecución, por lo que seguir el comando puede ser útil para alguien que se encuentre en una situación similar.
pgrep
obtiene la lista de procesos con nombre de pila, java en este caso.head
se usa para obtener los primeros 20 pids porque top no puede manejar más de 20 pids cuando se usa el argumento -p. Finalmentepaste
une a la lista de pids con ','.Puede controlar el nombre del proceso que está buscando en el comando anterior y la cantidad de procesos con ese nombre que le interesa ver. Puede ignorar la
head -n 20
parte si el número de sus procesos con el nombre dado es menor que 20.fuente