¿Cómo es posible ordenar el campo de CPU del comando ps?

18

Estoy tratando de hacer un pequeño comando que encuentre los procesos que usan la mayor cantidad de energía de la CPU.

Primero, uso ps aux > file.txty luego cut -c 16-20 file.txt | sort -n | tail -5.

El resultado que obtengo es este:

1.0 
2.7
8.
14.5
14.5 

Entonces, mi pregunta es ¿cómo puedo tener tanto el %CPUuso como los otros campos generados juntos?

Spyros Chiotakis
fuente
¿Por qué no usar topen su lugar?
Joseph R.
@JosephR. Solo quiero usar los comandos que acabo de aprender para el procesamiento de texto en este pequeño 'script'.
Spyros Chiotakis
1
Bueno, si lo estás haciendo como una especie de ejercicio, entonces quizás quieras mirar awk. Luego, cuando esté listo para mover las cosas "a producción", debe usarlo topen modo por lotes si es adecuado para sus necesidades.
Joseph R.
1
También puede eliminar el intermedio file.txthaciendops aux|cut -c ...
Joseph R.

Respuestas:

30

La respuesta correcta es:

ps --sort=-pcpu

Para los 5 mejores:

ps --sort=-pcpu | head -n 6

Por lo tanto, puede especificar columnas sin interferir con la ordenación.

Ex:

ps -Ao user,uid,comm,pid,pcpu,tty --sort=-pcpu | head -n 6

Nota de 'ckujau': --sortes compatible con psfrom procps, otras implementaciones pueden no tener esta opción.

Facundo Victor
fuente
Esta es de hecho la respuesta correcta.
Felipe Alvarez
2
Tenga en cuenta que --sortsolo es compatible con psfrom procps, otras implementaciones pueden no tener esta opción.
ckujau
Gracias 'ckujau' por notar esto. Edité la respuesta.
Facundo Victor
11

Ordenar en el campo apropiado (por defecto definido como transición de espacio en blanco a no espacio en blanco), en mi caso es el tercero:

ps aux | sort -n -k 3
Peterph
fuente
Esto no es tan bueno como la respuesta de @ Facundo, porque si cambia las columnas visibles, también deberá cambiar la clave de clasificación.
Jonathan Hartley
1
@ JonathanHartley sí, pero solo si tienes psla --sortopción.
Peter
Lo suficientemente justo. Y una longitud mínima de comentario.
Jonathan Hartley
3

Una molestia con la solución aceptada es que los encabezados para las diferentes columnas se incluirán en la salida. Otra cuestión es que cuando se utiliza el interruptor -xpara psque proporcionará las líneas de comandos completos para algunos programas, que pueden funcionar con y convertirse en una molestia en la salida.

Por ejemplo

  1. Líneas de comando molestas

    saml 18174 7.3 3.2 1174896 259756? Sl Aug27 132: 38 / opt / google / chrome / chrome --type = renderer --lang = en-US --force-fieldtrials = AsyncDns / AsyncDnsB / ForceCompositingMode / disable / InfiniteCache / No / OmniboxHQPReplaceHUPProhibitTrumpingInlineableResult / Standard / OmnibedrSS1QS1T1T1S1QS1S1S1S1S1S1S1S1S1S1S1S1S1S1S1S1S1S1T1S1S1S1S1T1S1T1S1T1S1T1S1T1S1T1S1T1T1T1T2S1T1T1T2T1S1T1T1T2TT2TSS1T2TT2TT2TT2TT2TTT2TTT2TTTTTTTTTAMPAMPING INNOVARTESPENDIENTE DETALLESFUERTATIVOS DETALLES DE RESULTADOS ENTRE LOS ESTADOS UNIDOS / OneClickSignIn / Standard / Prerender / PrerenderControl / SendFeedbackLinkLocation / default / Test0PercentDefault / group_01 / UMA-Dynamic-Binary-Uniformity-Trial / default / UMA-Session-Randomized-Uniformity-Trial-5-Percent / group_17 / UMA-Uniformity-Trial -1-Porcentaje / group_20 / UMA-Uniformity-Trial-10-Percent / group_07 / UMA-Uniformity-Trial-20-Percent / default / UMA-Uniformity-Trial-5-Percent / group_04 / UMA-Uniformity-Trial-50 -Percent / group_01 / --enable-crash-reporter = 4061BD10D0DC127169CE2132BC3FF8EC,

    root 1764 7.7 0.3 163692 28928 tty1 Ss + Aug21 817: 49 / usr / bin / Xorg: 0 -nr -verbose -auth / var / run / gdm / auth-for-gdm-fADI0V / database -nolisten tcp vt1

    ¡Chrome especialmente puede ser bastante molesto cuando se mira una pssalida como esta!

  2. Encabezados en salida

    $ ps auf | sort -nk 3 | head -20
    ...
    root      1741  0.0  0.0   4140   400 tty5     Ss+  Aug21   0:00 /sbin/mingetty /dev/tty5
    root      1743  0.0  0.0   4140   400 tty6     Ss+  Aug21   0:00 /sbin/mingetty /dev/tty6
    saml     13780  0.0  0.0 115088  4216 pts/13   Ss   Aug27   0:00 bash
    saml     20432  0.0  0.0   6308   400 pts/9    S+   Aug27   0:00  \_ inotifywatch -e CREATE /etc
    saml      8206  0.0  0.0 115296  1108 pts/6    Ss+  Aug21   0:03 bash
    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    saml     29352  0.1  0.5 661848 42960 pts/13   Sl+  17:59   0:18  \_ irb
    ...

    Puede ver el encabezado mezclado en la séptima línea de la salida.

Alternativas

  1. Deshacerse de los encabezados

    psproporciona un interruptor para deshabilitar la visualización de estos encabezados de columna. Es bastante fácil de usar, simplemente agregue el --no-headinginterruptor.

    $ ps aux --no-heading | sort -nk 3 | head -10
    68        1481  0.0  0.0  38592  2144 ?        Ssl  Aug21   0:28 hald
    68        1527  0.0  0.0  18016   672 ?        S    Aug21   0:01 /usr/libexec/hald-addon-acpi
    avahi     1333  0.0  0.0  27872  1172 ?        S    Aug21   0:01 avahi-daemon: running [grinchy.local]
    avahi     1334  0.0  0.0  27752    20 ?        S    Aug21   0:00 avahi-daemon: chroot helper
    dbus      1307  0.0  0.0  22716  1900 ?        Ss   Aug21   1:03 dbus-daemon --system
    gdm       1879  0.0  0.0 317220  2740 ?        Sl   Aug21   0:00 /usr/libexec/polkit-gnome-authentication-agent-1
    ntp       3060  0.0  0.0  32600  2152 ?        Ss   20:05   0:00 ntpd -u ntp:ntp -p /var/run/ntpd.pid -g
    root         1  0.0  0.0  19420  1004 ?        Ss   Aug21   0:01 /sbin/init
    root      1006  0.0  0.0      0     0 ?        S    Aug21   0:00 [kvm-irqfd-clean]
    root      1020  0.0  0.0      0     0 ?        S    Aug21   2:02 [kdmflush]

    O así:

    $ ps auf --no-heading | sort -nk 3 |head -10
    root      1735  0.0  0.0   4140   400 tty2     Ss+  Aug21   0:00 /sbin/mingetty /dev/tty2
    root      1737  0.0  0.0   4140   400 tty3     Ss+  Aug21   0:00 /sbin/mingetty /dev/tty3
    root      1739  0.0  0.0   4140   400 tty4     Ss+  Aug21   0:00 /sbin/mingetty /dev/tty4
    root      1741  0.0  0.0   4140   400 tty5     Ss+  Aug21   0:00 /sbin/mingetty /dev/tty5
    root      1743  0.0  0.0   4140   400 tty6     Ss+  Aug21   0:00 /sbin/mingetty /dev/tty6
    saml     13780  0.0  0.0 115088  4216 pts/13   Ss   Aug27   0:00 bash
    saml     20432  0.0  0.0   6308   400 pts/9    S+   Aug27   0:00  \_ inotifywatch -e CREATE /etc
    saml      2098  0.0  0.0 115508  3148 pts/9    Ss   Aug22   0:05 bash
    saml     27134  0.0  0.0 115496  6768 pts/18   Ss   Aug27   0:02 bash
    saml      3248  0.0  0.0 115076  1024 pts/0    Ss+  Aug21   0:00 bash
  2. Tome el control de las columnas que se muestran.

    Esto puede parecer una molestia, pero si está creando una secuencia de comandos para la captura de pssalida, no está tan mal. Un comando como este imitará la salida de ps aux, excepto intercambiar la forma más larga de la COMMANDcolumna con una versión más corta que solo muestre el nombre del ejecutable.

    $ ps ax --no-headings -o user,pid,%cpu,%mem,vsz,sgi_rss,tname,stat,start_time,time,ucmd

    Poner todo junto sin los encabezados de las columnas es mucho más fácil de manejar cuando se crean scripts.

    Lista de procesos de CPU% de mayor a menor:

    $ ps ax --no-headings -o user,pid,%cpu,%mem,vsz,sgi_rss,tname,stat,start_time,time,ucmd |sort -nrk 3|head -10
    saml     18086  114  6.4 1418852 515236 ?     Sl   Aug27 1-10:53:31 chrome
    saml     18536 14.7  4.1 1276240 328636 ?     Sl   Aug27 04:29:21 chrome
    saml     18558 12.2  3.4 1209712 278228 ?     Sl   Aug27 03:44:22 chrome
    saml     18543 10.9  3.8 1238132 308824 ?     Rl   Aug27 03:20:18 chrome
    root      1764  7.7  0.4 170220 35276 tty1    Rs+  Aug21 13:40:16 Xorg
    saml     18174  7.3  3.0 1167728 241728 ?     Sl   Aug27 02:14:25 chrome
    saml     18314  3.6  1.4 1049020 119308 ?     Sl   Aug27 01:06:19 chrome
    saml     18528  2.7  3.1 1178368 251212 ?     Sl   Aug27 00:50:55 chrome
    saml      2389  2.0  0.1 330632 8480 ?        Sl   Aug21 03:37:13 compiz
    saml     18208  1.7  1.3 1081132 108828 ?     Sl   Aug27 00:32:02 chrome

    Lista de procesos de CPU de% más bajo a más alto:

    $ ps ax --no-headings -o user,pid,%cpu,%mem,vsz,sgi_rss,tname,stat,start_time,time,ucmd |sort -nk 3|tail -10
    saml     18208  1.7  1.3 1082156 108348 ?     Sl   Aug27 00:32:03 chrome
    saml      2389  2.0  0.1 330632 8492 ?        Sl   Aug21 03:37:15 compiz
    saml     18528  2.7  3.1 1181440 250856 ?     Sl   Aug27 00:50:58 chrome
    saml     18314  3.6  1.5 1050044 119828 ?     Sl   Aug27 01:06:25 chrome
    saml     18174  7.3  3.0 1167728 242068 ?     Sl   Aug27 02:14:32 chrome
    root      1764  7.7  0.3 163688 28716 tty1    Ss+  Aug21 13:40:26 Xorg
    saml     18543 10.9  3.8 1235060 305464 ?     Sl   Aug27 03:20:32 chrome
    saml     18558 12.2  3.5 1214832 283560 ?     Sl   Aug27 03:44:34 chrome
    saml     18536 14.7  3.9 1267024 314400 ?     Sl   Aug27 04:29:39 chrome
    saml     18086  114  6.4 1412992 514856 ?     Sl   Aug27 1-10:55:28 chrome
slm
fuente