top -pid 3907 -stats "pid,command,cpu"
-pid 3907
: su ID de proceso
-stats pid,command,cpu
: solo muestra el ID del proceso, el nombre y el% de CPU
No es necesario ejecutar awk
en la salida.
Si desea procesar posteriormente la salida, utilice -l 0
para ejecutar en modo de registro (0 significa indefinidamente, todo lo demás limita el número de muestras). La salida se verá así (dos repeticiones):
Processes: 72 total, 3 running, 1 stuck, 68 sleeping, 326 threads
2011/05/10 19:15:13
Load Avg: 0.14, 0.14, 0.09
CPU usage: 20.0% user, 26.66% sys, 53.33% idle
SharedLibs: 5304K resident, 5208K data, 0B linkedit.
MemRegions: 16345 total, 1048M resident, 54M private, 338M shared.
PhysMem: 726M wired, 1802M active, 687M inactive, 3215M used, 750M free.
VM: 169G vsize, 1036M framework vsize, 5261732(0) pageins, 552476(0) pageouts.
Networks: packets: 46747406/52G in, 32528901/3715M out.
Disks: 9452898/244G read, 11226269/293G written.
PID COMMAND %CPU
3907 WindowServer 0.0
Processes: 72 total, 3 running, 1 stuck, 68 sleeping, 326 threads
2011/05/10 19:15:14
Load Avg: 0.13, 0.14, 0.09
CPU usage: 0.95% user, 1.90% sys, 97.14% idle
SharedLibs: 5304K resident, 5208K data, 0B linkedit.
MemRegions: 16346 total, 906M resident, 54M private, 386M shared.
PhysMem: 726M wired, 1802M active, 687M inactive, 3215M used, 751M free.
VM: 169G vsize, 1036M framework vsize, 5261732(0) pageins, 552476(0) pageouts.
Networks: packets: 46747406/52G in, 32528901/3715M out.
Disks: 9452898/244G read, 11226269/293G written.
PID COMMAND %CPU
3907 WindowServer 2.7
Use awk
una herramienta similar para mostrar solo cada línea 13 (ya que estas líneas contienen los valores en ese ejemplo):
$ top -l 0 -pid 3907 -stats pid,command,cpu | awk 'NR%13==0'
3907 WindowServer 0.0
3907 WindowServer 1.3
3907 WindowServer 2.2
# top -p1 -stats "pid,command,cpu" top: unknown option 't'
top
de Linux.Esto ciertamente se puede hacer y voy a explicar cómo lo haría. No pretendo que este sea un enfoque óptimo, pero hace el trabajo. Estoy usando Linux (y bash shell), por lo que el comportamiento predeterminado de mi parte superior puede ser ligeramente diferente. Por lo tanto, es posible que deba ajustar este mini-cómo para su escenario particular.
Simplemente ejecuta top , sin ningún argumento:
$ top
Aquí está el encabezado y una línea relevante de mi salida:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2569 user 20 0 339m 86m 10m S 7.8 6.9 6:42.99 java
He recogido un proceso que permanece en la memoria durante algún tiempo y en realidad consume CPU, lo usaré como proceso de prueba para alcanzar el objetivo final.
Por defecto, top se ejecuta en modo interactivo. Esto no me conviene, quiero capturar los datos relevantes e imprimirlos. Me encargaré de la tarea de mostrar los datos de forma interactiva después de eso. Citas relevantes de la página principal:
Este es el comando superior ajustado que imprime la salida solo una vez y luego sale:
$ top -b -n 1
Conozco el PID que quiero ver, así que agregaré una restricción más al principio, para que imprima datos solo sobre ese proceso:
$ top -b -n 1 -p 2569
Incluso en el modo por lotes, la parte superior todavía imprime un encabezado, que contiene estadísticas misceláneas de todo el sistema, como tiempo de actividad, memoria libre / intercambio, etc. No necesito esto. Todo lo que necesito es solo una línea, la que contiene datos sobre mi proceso, así que la cortaré de la salida completa de esta manera:
$ top -b -n 1 -p 2569 | tail -n 2 | head -n 1
Como puede ver, tengo la segunda línea de 1.
Conectaré esta línea a awk para extraer solo las columnas que necesito:
$ top -b -n 1 -p 2569 | tail -n 2 | head -n 1 | awk '{print $1, $12, $9}'
Hasta ahora, he estado haciendo estas manipulaciones en la línea de comandos, ahora es el momento de agregar algo de persistencia y flexibilidad a nuestro caso particular codificado. Estoy moviendo toda la línea en un simple script de shell. Lo llamaré 3top , el nombre se enfatiza porque se usará más tarde:
#!/bin/bash
top -b -n 1 -p 2569 | tail -n 2 | head -n 1 | awk '{print $1, $12, $9}'
El número PID está codificado, así es cómo hacer que el script lo acepte como argumento de línea de comando:
#!/bin/bash
top -b -n 1 -p "$1" | tail -n 2 | head -n 1 | awk '{print $1, $12, $9}'
Para hacer estadísticas de visualización 3top sobre PID 2569, debe llamarse así:
$ ./3top 2569
También quiero que se muestre el porcentaje después de la carga de la CPU, así que estoy ajustando mi script 3top de esta manera:
#!/bin/bash
out=$(top -b -n 1 -p "$1" | tail -n 2 | head -n 1 | awk '{print $1, $12, $9}')
echo "$out%"
Redirigí toda la salida de una cadena de comandos (conectados a través de tuberías) a una variable. Luego lo imprimo usando echo y agrego un '%' al final, ya que la carga de la CPU es el último campo
En este punto, tengo un script por lotes que acepta un PID como argumento e imprime estadísticas una vez. ¿Quieres un monitoreo en tiempo real? ¡Es fácil, porque el reloj puede hacerlo! Ejecute el script así:
$ watch -n 1 3top 2569
Monitoreará en tiempo real ejecutando 3top una vez por segundo.
fuente
top
. opción o sintaxis no válida: -b . No tengo idea de por qué esto fue repetidamente votado.top
(inprocps
) no puede instalarse usando Homebrew, MacPorts o Fink y no puede compilarse desde la fuente usandomake
occ top.c
.El
top
formato de visualización es personalizable, pero no hay una manera de especificar las opciones de visualización en la línea de comando. Sin embargo, si eres inventivo, probablemente puedas hacer lo que necesites manipulando hábilmente el~/.toprc
archivo.Suponiendo que aún no ha personalizado la visualización de
top
(y no tiene un~/.toprc
archivo):top
.*
lado que no desee, presione la letra correspondiente para anular la selección de ese campo. Por ejemplo, presione epara anular la selección delUser Name
campo. Cuando haya terminado, sólo se debe tener un*
ladoProcess Id
,CPU usage
yCommand name/line
.~/.toprc
archivo.top
, luego reinicie para verificar que su configuración esté guardada.~/.toprc
a algo como~/min.toprc
antes de iniciartop
. Cuando desee cambiar al diseño mínimo, cambie el nombre~/min.toprc
a~/.toprc
antes de iniciartop
.top
Probablemente, alguien con mucha más experiencia y conocimiento que yo pueda trabajar en el cambio de nombre y el lanzamiento de este archivo en un simple script de shell. Necesitará una consideración especial si sutop
diseño regular ya ha sido personalizado.fuente
.toprc
? Me gusta agregar el filtroRUID>999
al inicio.