Zeigen Sie die fünf CPU-verbrauchenden Prozesse mit `ps` an

101

Wie zeige ich die fünf CPU-verbrauchenden Prozesse mit ps?

PlanasB
quelle

Antworten:

95

Warum verwenden, pswenn Sie es einfach mit dem topBefehl 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"
Boban P.
quelle
3
ps aux | sort -k 3,3 | Schwanz -n 5 ;-)
PlanasB
1
Es ist gut, die numerische Sortierung einzuschließen, um den Header von ps aux zu überspringen. ps aux | sort -nrk 3,3 | head -n 5
Syss
1
diese laicht viele Prozesse , die mehr Ressourcen verbrauchen und ist auch anfälliger für Race - Bedingung ist, weil , wenn die verrohrt Daten kommt haben die Prozessliste auf den Kopf bereits geändert
phuclv
Das ist wahr @ LưuVĩnhPhúc, aber ich frage mich, wie sich das von der toptatsächlichen Funktionsweise unterscheidet .
Eiswasser
1
@icedwater topliest die Prozessliste und zeigt das Ergebnis alleine an, ohne zu einem anderen Prozess
weiterzuleiten
87

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 psnicht erkannt --sort, bietet -rjedoch 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
Facundo Victor
quelle
3
Dies ist die richtige Antwort. Vielen Dank, Facundo. Ich habe versucht, anderen zu erklären, dass Sie sort and pipe verwenden können, aber ps wird auch mit einer Sortieroption geliefert, und jetzt sehen Sie, dass Sie es auch verwenden, was großartig ist.
Luis Alvarado
Der 2. Befehl erscheint nützlicher ... aber der erste scheint nur zu zeigen bash(x2, oder headauch) ps...
Wilf
3
@Wilf Der erste zeigt, wie nach CPU-Verbrauch sortiert wird, ohne den Befehl zu verwenden 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.
Facundo Victor
27

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)

Ryan Horrisberger
quelle
22

Ich denke nicht, pswonach 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 psbasierten Lösungen.

Caleb
quelle
1
In OS X ist dies top -o cpu -n 5eine Möglichkeit, dasselbe zu erreichen. Weiß jemand? Meine topist anders als deine top.
boehj
Sie sind derjenige mit dem anderen Oberteil, also wären Sie in der Lage zu sagen. Mein Top hat nicht -ound -nlegt fest, wie oft das Display vor dem Beenden aktualisiert wird.
Caleb
Fair genug. Ich werde heute Nachmittag auf eine Linux-Box steigen und einen Blick darauf werfen. Mein topscheint keinen Batch-Modus zu haben, was ziemlich einschränkend ist. Es muss eine Möglichkeit zur Weiterleitung topin andere Befehle geben. Ich werde etwas recherchieren.
Boehj
Ich habe den Batch-Modus-Schalter in meiner Antwort erwähnt, aber er ist für mein Top nicht erforderlich, da er automatisch erkennt, dass er Teil einer Pipe ist und nicht einer interaktiven Sitzung. Hast du versucht, es einfach ohne das zu pfeifen?
Caleb
1
Wird besorgt. GNU tophat heute Nachmittag wie beschrieben gearbeitet. Prost.
boehj
6

Schnellster Liner, den ich dafür gefunden habe (Anmerkung 6, da der Header zusammenfällt):

ps aux k-pcpu | head -6
Nestor Urquiza
quelle
5

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 cam 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

Cian D
quelle
4

Um anderen wertvollen Antworten einen Punkt hinzuzufügen, bevorzuge ich:

ps auxk-c | head -6

Es druckt auch die Kopfzeile, was nett ist.

Hier kist identisch mit --sortund cgibt 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.

2i3r
quelle
3

Das Kommandozeilen-Tool pshat 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 psManpage nach, welche anderen Optionen verfügbar sind .

$ man ps
Christopher James Morton
quelle
0

topUnter 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
ulf
quelle
0

topzeigt an, was Ihre CPU verwendet. Wenn Sie es installiert haben, htopkönnen Sie die Steuerung verfeinern, einschließlich der Filterung nach - in Ihrem Fall - CPU.

PSN
quelle
0

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 cmdodercommand

%cpu: Dieses Argument gibt den Prozentsatz der CPU-Auslastung des Prozesses im Format "##. #" An. Hier pcpukann 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 pmemkann 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].

Muhammad
quelle
-2

top -bn1 |sed -n '7,12'pfunktioniert auch als netter kleiner Liner.
Allerdings bevorzuge ich ps mit --sort = X -o X, Y, Z

Mit ps können Sie verschiedene Statistiken für einen Prozess-ODER-Benutzer abrufen und diese dann mit einem Pipe-to-awk-Befehl ODER-verknüpfen.

jshedler
quelle