Antworten:
Warum verwenden, ps
wenn Sie es einfach mit dem top
Befehl tun können ?
Wenn Sie verwenden müssen ps
, versuchen Sie Folgendes:
ps aux | sort -nrk 3,3 | head -n 5
Wenn Sie etwas möchten, das wirklich "top" ist und ständig aktualisiert wird, verwenden Sie watch
watch "ps aux | sort -nrk 3,3 | head -n 5"
ps aux | sort -nrk 3,3 | head -n 5
top
tatsächlichen Funktionsweise unterscheidet .
top
liest die Prozessliste und zeigt das Ergebnis alleine an, ohne zu einem anderen Prozess
Die richtige Antwort lautet :
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
Hinweis für MAC OS X : Wird in Mac OS X ps
nicht erkannt --sort
, bietet -r
jedoch die Sortierung nach aktueller CPU-Auslastung an. Daher können Sie für Mac OS X Folgendes verwenden:
ps -Ao user,uid,comm,pid,pcpu,tty -r | head -n 6
bash
(x2, oder head
auch) ps
...
sort
. Der zweite zeigt, wie Spalten angegeben werden, ohne die Sortierung zu beeinträchtigen. Wenn Sie etwas erklären, ist es immer besser, kurz und prägnant zu sein und jeweils eine Sache zu erklären.
Abhängig von Ihren Bedürfnissen finden Sie dies möglicherweise etwas lesbarer:
ps -eo pcpu,pid,user,args --no-headers| sort -t. -nk1,2 -k4,4 -r |head -n 5
Beispielausgabe:
1.3 4 root [ksoftirqd/0]
1.1 9 root [ksoftirqd/1]
1.0 17606 nobody /usr/sbin/gmetad
1.0 13 root [ksoftirqd/2]
0.3 17401 nobody /usr/sbin/gmond
(Die Felder sind% CPU, PID, USER, COMMAND)
Ich denke nicht, ps
wonach du suchst. Hast du dir die Ausgabe von angeschaut top
?
Wenn Sie GNU-Top haben, versuchen Sie, im Batch-Modus eine nach CPU-Auslastung sortierte Prozessliste auszuspucken und mit head / tail die Top-5-Zeilen zu erhalten (die ersten 8 sind Überschriften):
top -b -n 1 | head -n 12 | tail -n 5
Das BSD-Top scheint sich anders zu verhalten und verfügt nicht über einen nicht interaktiven Modus. Verwenden Sie daher eine der anderen ps
basierten Lösungen.
top -o cpu -n 5
eine Möglichkeit, dasselbe zu erreichen. Weiß jemand? Meine top
ist anders als deine top
.
-o
und -n
legt fest, wie oft das Display vor dem Beenden aktualisiert wird.
top
scheint keinen Batch-Modus zu haben, was ziemlich einschränkend ist. Es muss eine Möglichkeit zur Weiterleitung top
in andere Befehle geben. Ich werde etwas recherchieren.
top
hat heute Nachmittag wie beschrieben gearbeitet. Prost.
Schnellster Liner, den ich dafür gefunden habe (Anmerkung 6, da der Header zusammenfällt):
ps aux k-pcpu | head -6
Beachten Sie, dass die aktuellen Versionen von ps Sortierfunktionen basierend auf den Feldcodes (auf der ps-Manpage) enthalten. Der Feldcode für die Prozessorverwendung lautet "c". Sie können --sort c
am Ende eines ps-Befehls zps aux --sort c
Dadurch wird der Prozess mit der meisten CPU am Ende der Liste platziert. Umgekehrte Reihenfolge der Liste durch Hinzufügen eines Minus zum Feldcode, der zum Sortieren verwendet wird, zps aux --sort -c
Um anderen wertvollen Antworten einen Punkt hinzuzufügen, bevorzuge ich:
ps auxk-c | head -6
Es druckt auch die Kopfzeile, was nett ist.
Hier k
ist identisch mit --sort
und c
gibt das CPU-Nutzungsfeld (Alias %cpu
) für die Sortierung an, während -
es sich um die umgekehrte Sortierung handelt.
Sie können mehr Bezeich durch voneinander getrennt sind ,
, andere mögliche Bezeich sind: %mem
, args
, bsdstart
, pid
, gid
, uid
... , die Sie vollständige Liste in finden STANDARD Formatbezeichner Abschnitt der Mann - Seite. Zum Beispiel:
ps auxk -gid,-%mem | head -11
würde 10 Prozesse mit der höchsten Gruppen-ID drucken, intern sortiert nach Speichernutzung.
Das Kommandozeilen-Tool ps
hat eine eigene Sortieroption, daher bevorzuge ich:
$ ps -eo pcpu,args --sort=-%cpu | head
Sie können die gewünschten Spalten hinzufügen. Sehen Sie auf der ps
Manpage nach, welche anderen Optionen verfügbar sind .
$ man ps
top
Unter Mac OS X gibt es eine Option für den Protokollierungsmodus in Form von top -l numberOfSamples
(was dem Batch-Modus von GNU zu entsprechen scheint top
). Es ist jedoch erforderlich, mindestens zwei Stichproben zu haben, da "bei der ersten angezeigten Stichprobe für jeden Prozess ein ungültiger Prozentsatz der CPU angezeigt wird, da er anhand des Deltas zwischen Stichproben berechnet wird" ( man 1 top
).
# examples
top -o cpu -l 2 -n 5 | tail -n 6
top -o cpu -l 2 -n 5 -stats pid,command,cpu | tail -n 6
top -o cpu -l 2 -n 5 -stats pid,command,cpu -U $(logname) | tail -n 6
Ich glaube, der einfachste Weg, um zu sehen, Top-5-CPU-verbrauchenden Prozess ist,
ps -eo pid,comm,%cpu,%mem --sort=-%cpu | head -n 5
Um zu sehen, wie viel Speicher in den Top 5 verbraucht wird,
ps -eo pid,comm,%cpu,%mem --sort=-%mem | head -n 5
Wo,
-e
: Mit diesem Flag werden alle Prozesse ausgewählt
-o
: Dieses Flag wird zum benutzerdefinierten Formatieren verwendet.
pid
: Dieses Argument wird zum Anzeigen von pid verwendet
comm
: Dieses Argument wird nur zum Anzeigen des Befehlsnamens verwendet. Um den vollständigen Befehl abzurufen args
, verwenden Sie cmd
odercommand
%cpu
: Dieses Argument gibt den Prozentsatz der CPU-Auslastung des Prozesses im Format "##. #" An. Hier pcpu
kann auch verwendet werden.
%mem
: Dieses Argument gibt das Verhältnis der Größe des residenten Satzes des Prozesses zum physischen Speicher auf dem Computer in Prozent an. Hier pmem
kann auch verwendet werden.
--sort
: Geben Sie die Sortierreihenfolge an. Nach =
dem -
Vorzeichen wird der höchste Wert oben sortiert, wobei die Standardoption darin +
besteht, eine aufsteigende numerische Reihenfolge aufzulisten [dh 0 bis n].