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 awken la salida.
Si desea procesar posteriormente la salida, utilice -l 0para 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 awkuna 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'topde 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:
$ topAquí está el encabezado y una línea relevante de mi salida:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND2569 user 20 0 339m 86m 10m S 7.8 6.9 6:42.99 javaHe 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 1Conozco 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 2569Incluso 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 1Como 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/bashtop -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/bashtop -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 2569Tambié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/bashout=$(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 2569Monitoreará 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 usandomakeocc top.c.El
topformato 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~/.toprcarchivo.Suponiendo que aún no ha personalizado la visualización de
top(y no tiene un~/.toprcarchivo):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 Namecampo. Cuando haya terminado, sólo se debe tener un*ladoProcess Id,CPU usageyCommand name/line.~/.toprcarchivo.top, luego reinicie para verificar que su configuración esté guardada.~/.toprca algo como~/min.toprcantes de iniciartop. Cuando desee cambiar al diseño mínimo, cambie el nombre~/min.toprca~/.toprcantes de iniciartop.topProbablemente, 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 sutopdiseño regular ya ha sido personalizado.fuente
.toprc? Me gusta agregar el filtroRUID>999al inicio.