Wie ist es möglich, das CPU-Feld des ps-Befehls zu sortieren?

18

Ich versuche, einen kleinen Befehl zu schreiben, der die Prozesse findet, die die meiste CPU-Leistung verbrauchen.

Zuerst benutze ich ps aux > file.txtund dann cut -c 16-20 file.txt | sort -n | tail -5.

Das Ergebnis ist folgendes:

1.0 
2.7
8.
14.5
14.5 

Meine Frage ist also, wie ich sowohl die %CPUVerwendung als auch die anderen Felder zusammen ausgeben lassen kann.

Spyros Chiotakis
quelle
Warum nicht topstattdessen verwenden?
Joseph R.
@ JosephR. Ich möchte nur die Befehle verwenden, die ich gerade für die Textverarbeitung in diesem kleinen "Skript" gelernt habe.
Spyros Chiotakis
1
Nun, wenn Sie es als eine Art Übung machen, dann möchten Sie vielleicht schauen awk. Wenn Sie danach bereit sind, Dinge "in die Produktion" zu verlagern, sollten Sie den topBatch-Modus verwenden, wenn er für Ihre Anforderungen geeignet ist.
Joseph R.
1
Sie können das Intermediate auch eliminieren, file.txtindem Sieps aux|cut -c ...
Joseph R.

Antworten:

30

Die richtige Antwort ist:

ps --sort=-pcpu

Für die Top 5:

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

So können Sie Spalten angeben, ohne die Sortierung zu beeinträchtigen.

Ex:

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

Anmerkung von 'ckujau': --sortwird von psfrom unterstützt procps, andere Implementierungen haben diese Option möglicherweise nicht.

Facundo Victor
quelle
Dies ist in der Tat die richtige Antwort.
Felipe Alvarez
2
Bitte beachten Sie, dass --sortnur von psfrom unterstützt wird procps, bei anderen Implementierungen ist diese Option möglicherweise nicht verfügbar.
ckujau
Vielen Dank, 'ckujau', dass Sie dies zur Kenntnis genommen haben. Ich habe die Antwort bearbeitet.
Facundo Victor
11

Sortieren Sie nach dem entsprechenden Feld (standardmäßig als Übergang von Leerzeichen zu Nicht-Leerzeichen definiert). In meinem Fall ist dies das dritte Feld:

ps aux | sort -n -k 3
peterph
quelle
Dies ist nicht so gut wie die Antwort von @ Facundo, denn wenn Sie die sichtbaren Spalten ändern, müssen Sie auch den Sortierschlüssel ändern.
Jonathan Hartley
1
@ JonathanHartley ja, aber nur, wenn Sie psdie --sortOption hat.
Peterph
Meinetwegen. Und eine minimale Kommentarlänge.
Jonathan Hartley
3

Ein Ärger mit der akzeptierten Lösung ist, dass die Überschriften für die verschiedenen Spalten in die Ausgabe einbezogen werden. Ein weiteres Problem ist , dass wenn Sie den Schalter verwenden , -xum pses wird die vollen Befehlszeilen für einige Programme bieten, die auf laufen können und ein Ärgernis in der Ausgabe werden.

Beispielsweise

  1. Ärgerliche Kommandozeilen

    saml 18174 7.3 3.2 1174896 259756? Sl Aug27 132: 38 / opt / google / chrome / chrome --type = renderer --lang = de-DE --force-fieldtrials = AsyncDns / AsyncDnsB / ForceCompositingMode / disable / InfiniteCache / No / OmniboxHQPReplaceHUPProhibitTrumpingInlineableResult / Standard / OmniboxStQ / OneClickSignIn / Standard / Prerender / PrerenderControl / SendFeedbackLinkLocation / default / Test0PercentDefault / group_01 / UMA-Dynamic-Binary-Uniformity-Test / default / UMA-Session-Randomized-Uniformity-Test-5-Percent / group_17 / UMA-Uniformity-Test -1-Prozent / Gruppe_20 / UMA-Einheitlichkeitsstudie-10-Prozent / Gruppe_07 / UMA-Einheitlichkeitsstudie-20-Prozent / Standard / UMA-Einheitlichkeitsstudie-5-Prozent / Gruppe_04 / UMA-Einheitlichkeitsstudie-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-für-gdm-fADI0V / database -nolisten tcp vt1

    Besonders Chrome kann bei einer psAusgabe wie dieser ziemlich nervig sein !

  2. Überschriften in der Ausgabe

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

    Sie können den Header in der 7. Zeile der Ausgabe sehen.

Alternativen

  1. Die Überschriften loswerden

    psbietet einen Schalter zum Deaktivieren der Anzeige dieser Spaltenüberschriften. Es ist ziemlich einfach zu bedienen, einfach den --no-headingSchalter hinzufügen .

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

    Oder so:

    $ 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. Übernehmen Sie die Kontrolle über die angezeigten Spalten.

    Dies kann schmerzhaft erscheinen, aber wenn Sie die Erfassung der psAusgabe per Skript ausführen, ist dies nicht allzu schlimm. Ein Befehl wie dieser ahmt die Ausgabe von nach ps aux, mit der Ausnahme, dass die längere Form der COMMANDSpalte durch eine kürzere Version ersetzt wird, die nur den Namen der ausführbaren Datei anzeigt.

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

    Wenn Sie das Ganze ohne die Spaltenüberschriften zusammenfassen, ist es viel einfacher, mit Skripten umzugehen.

    Liste der höchsten bis niedrigsten% CPU-Prozesse:

    $ 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 der niedrigsten bis höchsten% CPU-Prozesse:

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