Comment est-il possible de trier le champ CPU de la commande ps?

18

J'essaie de faire une petite commande qui trouvera les processus qui utilisent le plus de puissance CPU.

Tout d'abord, j'utilise ps aux > file.txtet ensuite cut -c 16-20 file.txt | sort -n | tail -5.

Le résultat que j'obtiens est le suivant:

1.0 
2.7
8.
14.5
14.5 

Donc, ma question est de savoir comment puis-je produire à la fois l' %CPUutilisation et les autres champs?

Spyros Chiotakis
la source
Pourquoi ne pas utiliser à la topplace?
Joseph R.
@JosephR. Je veux juste utiliser les commandes que je viens d'apprendre pour le traitement de texte sur ce petit "script".
Spyros Chiotakis
1
Eh bien, si vous le faites comme une sorte d'exercice, vous voudrez peut-être regarder awk. Ensuite, lorsque vous êtes prêt à déplacer les choses "en production", vous devez utiliser topen mode batch si cela convient à vos besoins.
Joseph R.
1
Vous pouvez également éliminer l'intermédiaire file.txten faisantps aux|cut -c ...
Joseph R.

Réponses:

30

La bonne réponse est:

ps --sort=-pcpu

Pour le top 5:

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

Vous pouvez donc spécifier des colonnes sans interférer avec le tri.

Ex:

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

Note de 'ckujau': --sortest supporté par psfrom procps, d'autres implémentations peuvent ne pas avoir cette option.

Facundo Victor
la source
C'est en effet la bonne réponse.
Felipe Alvarez
2
S'il vous plaît noter que --sortest uniquement pris en charge par psd' procpsautres implémentations ne peut pas avoir cette option.
ckujau
Merci 'ckujau' de l'avoir noté. J'ai édité la réponse.
Facundo Victor
11

Trier sur le champ approprié (défini par défaut comme transition espace blanc vers espace non blanc), dans mon cas c'est le 3ème:

ps aux | sort -n -k 3
peterph
la source
Ce n'est pas aussi bon que la réponse de @ Facundo, car si vous changez les colonnes visibles, vous devrez également changer la clé de tri.
Jonathan Hartley
1
@JonathanHartley oui, mais seulement si vous en avez psla --sortpossibilité.
peterph
C'est suffisant. Et une longueur minimale de commentaire.
Jonathan Hartley
3

Un inconvénient de la solution acceptée est que les en-têtes des différentes colonnes seront inclus dans la sortie. Un autre problème est que lorsque vous utilisez le commutateur-x pour psqu'il fournira les lignes complètes de commande pour certains programmes, qui peuvent fonctionner et devenir une nuisance dans la sortie.

Par exemple

  1. Lignes de commande ennuyeuses

    saml 18174 7,3 3,2 1174896 259756? Sl 27 août 132:38 / opt / google / chrome / chrome --type = renderer --lang = en-US --force-fieldtrials = AsyncDns / AsyncDnsB / ForceCompositingMode / disable / InfiniteCache / No / OmniboxHQPReplaceHUPProhibitTrumpingInlineableResult / Standard / OmnibriQSearch 7 / 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-Percent / 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 + août 21 817: 49 / usr / bin / Xorg: 0 -nr -verbose -auth / var / run / gdm / auth-for-gdm-fADI0V / database -nolisten tcp vt1

    Chrome en particulier peut être assez ennuyeux lorsque l'on regarde une pssortie comme celle-ci!

  2. En-têtes en sortie

    $ 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
    ...

    Vous pouvez voir l'en-tête mélangé à la 7e ligne dans la sortie.

Alternatives

  1. Se débarrasser des en-têtes

    psfournit un commutateur pour désactiver l'affichage de ces en-têtes de colonne. C'est assez facile à utiliser, ajoutez simplement le --no-headingcommutateur.

    $ 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]

    Ou comme ça:

    $ 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. Prenez le contrôle des colonnes affichées.

    Cela peut sembler pénible, mais si vous scriptez la capture de pssortie, ce n'est pas trop mal. Une commande comme celle-ci imitera la sortie de ps aux, sauf pour remplacer la forme plus longue de la COMMANDcolonne par une version plus courte qui montre simplement le nom de l'exécutable.

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

    En rassemblant le tout sans les en-têtes de colonne, il est beaucoup plus facile de gérer les scripts.

    Liste des processus CPU% les plus élevés au plus bas:

    $ 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

    Liste des processus CPU% du plus bas au plus élevé:

    $ 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
la source