¿Cómo hacer que el comando ps muestre memoria en mb en lugar de kb?

11

El comando ps de Linux muestra diferentes usos de memoria como rss, tamaño en kb por defecto. ¿Hay alguna manera de mostrar en mb o gb como ls -s --human-readablehace?

balki
fuente
1
La falta de mención man psme sugiere que no existe tal opción incorporada.
Ulrich Schwarz

Respuestas:

20

AFAIK no puede lograrlo simplemente por pscomando puro con opciones. Sin embargo, puede usar algunos procesadores de texto como awky hacer que haga lo que quiera:

ps afu | awk 'NR>1 {$5=int($5/1024)"M";}{ print;}'

Esto toma el resultado de psy luego para cada línea, excepto la primera, reemplaza la quinta columna que está en KB normalmente, a MB agregando el sufijo M.

Puede convertirlo en un alias y almacenarlo en un archivo .bashrc para que pueda llamarlo por algo como myps.

La mayoría de las personas se preguntan cómo preservar el formato o utilizar otras unidades y precisión.

Para una versión simple, puede usar column -tel filtro de salida:

ps afu | awk 'NR>1 {$5=int($5/1024)"M";}{ print;}' | column -t

Sin embargo, esto no reconoce espacios en la última columna correctamente. Desafortunadamente, tenemos que lidiar con el formato de texto y preparar nuestra propia cadena de formato en printfformato similar.

ps afu | awk 'NR==1 {o=$0; a=match($0,$11);}; NR>1 {o=$0;$5=int(10*$5/1024)/10"M";}{ printf "%-8s %6s %-5s %-5s %9s %9s %-8s %-4s %-6s %-5s %s\n", $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, substr(o, a);}'

Explicación:

  • NR==1la condición es solo para la primera línea (encabezado). Estamos utilizando la salida ps original para determinar dónde está comenzando el COMANDO:
    • o=$0 almacena toda la línea sin modificar para que podamos usarla más tarde
    • a=match($0,$11) encuentra la ubicación del undécimo campo (que debería ser donde comienza la columna COMANDO en la salida original)
  • NR>1es para las siguientes líneas (datos). Estamos cambiando el quinto campo:
    • $5=int(10*$5/1024)/10"M" cambia el valor a Megabytes con un decimal y agrega el sufijo "M".
    • printf muestra todos los campos en forma de columna:
      • %-10ssignifica scadena, 10para 10 caracteres de ancho, -para alinear a la izquierda
      • %8ssignifica scadena, 8para 8 caracteres de ancho, y debido a que no hay -salida de este campo está alineado a la derecha.
    • substr(o, a)toma la subcadena de la línea original (por lo tanto, oalmacenada antes) a partir de la posición acalculada en la condición anterior, por lo que podemos mostrar la salida del comando con espacios preservados.
DevilaN
fuente
3
Modificado para GB y con 2 decimales (p 1.23GB. Ej. ):ps aux | awk '{$5=int(100 * $5/1024/1024)/100"GB";}{ print;}'
mahemoff
1
¿Es posible lograr el mismo objetivo preservando el psformato? Las pestañas están completamente despojadasawk
Chris
Veo que estás lanzando como int, ¿es posible tener un decimal como 1.2M?
JavaSheriff
¿Por qué faltan pestañas?
Alex78191
@ Alex78191: Se agregó un comando alternativo para formatear con salida tipo tabla
DevilaN