it-swarm.com.de

top -c Befehl in Linux zum Filtern von Prozessen basierend auf Prozessnamen

top -c

Top listet alle Prozesse auf. Es gibt gute Optionen, um die Prozesse nach Benutzername mit der Option -u zu filtern. Ich frage mich jedoch, ob es eine einfache Möglichkeit gibt, die Prozesse basierend auf dem Prozessnamen zu filtern, der in der Spalte COMMAND der oberen Ausgabe aufgeführt ist.

Zum Beispiel möchte ich die Option top -some mit -substring von processname und top zeigt pids an, die nur diesen Teilstring im Befehlsnamen enthalten

112
user1615330

Verwenden von pgrep, um pid von übereinstimmenden Befehlszeilen abzurufen:

top -c -p $(pgrep -d',' -f string_to_match_in_cmd_line)

top -p erwartet eine durch Kommas getrennte Liste von Pids, daher verwenden wir -d',' in pgrep. Das -f-Flag in pgrep stimmt mit der Befehlszeile anstelle des Programmnamens überein.

173
perreal

Dies kann interaktiv erfolgen

Nachdem Sie top -c ausgeführt haben, drücken Sie o und schreibe einen Filter auf eine Spalte, z.B. Um Zeilen anzuzeigen, in denen die Spalte COMMAND die Zeichenfolge foo enthält, geben Sie COMMAND=foo ein.

Wenn Sie nur eine grundlegende Ausgabe wünschen, könnte dies ausreichen:

top -bc |grep name_of_process
94
nos

Sie können top während der Ausführung Filter hinzufügen. Drücken Sie einfach die Taste o Geben Sie einen Filterausdruck ein. Um beispielsweise alle Java-Prozesse zu überwachen, verwenden Sie den Filterausdruck COMMAND=Java. Sie können mehrere Filter hinzufügen, indem Sie die Taste erneut drücken. Mit der Taste können Sie nach Benutzer filtern u Taste, und Sie können alle Filter mit der Taste löschen = Schlüssel.

64
Don Kirkby

@Perreals Befehl funktioniert großartig! Wenn Sie es vergessen, versuchen Sie es in zwei Schritten ...

beispiel: Filter oben, um nur die Anwendung namens Yakuake anzuzeigen:

$ pgrep yakuake
1755

$ top -p 1755

nützliche top interaktive Befehle 'c': Schaltet den vollständigen Pfad gegen den Befehlsnamen um 'k': töten durch PID 'F': filtern nach ... Auswahl mit Pfeilen ... Dann drücken Sie 's', um die Sortierung festzulegen

die Antwort unten ist auch gut ... Ich habe das heute gesucht, konnte es aber nicht finden. Vielen Dank

11

Nachdem ich auf StackOverflow so viele Antworten gesucht hatte, habe ich keine passende Lösung gefunden.

Das heißt, um den Befehl top auszuführen, um mit dem angegebenen Schlüsselwort immer auf dem neuesten Stand zu bleiben, und wir müssen nicht immer STRG + C/top verwenden, wenn neue Prozesse erscheinen.

Also mache ich eine neue ...

Hier ist die Version ohne Neustart.

__keyword=name_of_process; (while :; do __arg=$(pgrep -d',' -f $__keyword); if [ -z "$__arg" ]; then top -u 65536 -n 1; else top -c -n 1 -p $__arg; fi; sleep 1; done;)

Ändern Sie das __keyword und es sollte funktionieren. (Ubuntu 2.6.38 getestet)

2.14.2015 fügte hinzu: Der System-Workload-Teil fehlt mit dem obigen Code . Für Personen, die sich um den "Lastmittelwert" -Teil kümmern:

__keyword=name_of_process; (while :; do __arg=$(pgrep -d',' -f $__keyword); if [ -z "$__arg" ]; then top -u 65536 -n 1; else top -c -n 1 -p $__arg; fi; uptime; sleep 1; done;)
7
Val

Die meisten Antworten schlagen hier fehl, wenn die Prozessliste 20 Prozesse überschreitet. Dies ist top -p Optionslimit . Für diejenigen mit älterem Top, die keine Filterung mit o-Optionen unterstützen, ist hier ein Skript-Beispiel, um Full-Screen/Console-Outuput zu erhalten (Zusammenfassungsinformationen fehlen in dieser Ausgabe).

__keyword="YOUR_FILTER" ; ( FILL=""; for i in  $( seq 1 $(stty size|cut -f1 -d" ")); do FILL=$'\n'$FILL; done ;  while :; do HSIZE=$(( $(stty size|cut -f1 -d" ")  - 1 ));  (top -bcn1 | grep "$__keyword"; echo "$FILL" )|head -n$HSIZE; sleep 1;done )

Einige Erklärungen

__keyword = your grep filter keyword
HSIZE=console height
FILL=new lines to fill the screen if list is shorter than console height
top -bcn1 = batch, full commandline, repeat once
1
Manwe

was ist damit?

top -c -p <PID>
1
Satish

Am Ende habe ich ein Shell-Skript mit folgendem Code verwendet:

#!/bin/bash

while [ 1 == 1 ]
do
    clear
    ps auxf |grep -ve "grep" |grep -E "MSG[^\ ]*" --color=auto
    sleep 5
done
0
Jester