So zeigen Sie einen bestimmten Prozess oben an

47

Gibt es relativ einfache Optionen mit top, um einen bestimmten Prozess zu verfolgen?
Idealerweise durch Identifizierung des Prozesses anhand eines vom Menschen lesbaren Werts? zB chromeoder java.

Mit anderen Worten, ich möchte alle oben angegebenen typischen Informationen anzeigen, aber die Ergebnisse müssen nach den angegebenen Parametern gefiltert werden, d. H. 'chrome' oder 'java'

Michael Coleman
quelle
1
haben Sie versucht top | grep chrome?
Pandya
1
Sie können auch verwenden ps -x | chrome, um PID zu erhalten (lassen Sie PID gezeigt 2034) und danntop | grep 2034
Pandya
top | grep chromehat einwandfrei funktioniert - danke!
Michael Coleman
@Pandya - der von mir gesuchte Prozess lief auch nur für ein paar Sekunden (node.js während eines Integrationstests) - was bedeutete ps -x | process_name, dass die PID anders war, wenn ich den Prozess erneut ausführte ursprüngliche PID würde es nicht identifizieren.
Michael Coleman

Antworten:

24

Sie können einfach verwenden grep:

NAME
       grep, egrep, fgrep, rgrep - print lines matching a pattern

SYNOPSIS
       grep [OPTIONS] PATTERN [FILE...]
       grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

DESCRIPTION
       grep  searches  the  named  input  FILEs (or standard input if no files are named, or if a single
       hyphen-minus (-) is given as file name) for lines containing a match to the  given  PATTERN.   By
       default, grep prints the matching lines.

Führen Sie den folgenden Befehl aus, um die gewünschte Ausgabe zu erhalten (ex-chrome):

top | grep chrome

Hier verwenden wir grepmit Pipelines |so top& grepparallel laufen; topAusgabe an grep(als Eingabe) und grep chromefiltert übereinstimmende Zeilen, chromebis sie topgestoppt werden.

Pandya
quelle
1
danke, ich weiß, dass andere Leute ihre Vorlieben haben, aber ich mag diese Antwort, weil sie leicht zu verstehen ist und daher auch in Zukunft leichter zu merken ist! - Ich hätte gestimmt, aber ich habe nicht genug Ruf ...
Michael Coleman
3
Dies funktioniert nur, wenn der Prozess in der oben angezeigten Ausgabe ist. Ich denke, @ Rameshs Antwort sollte die akzeptierte sein
jb
@JamieBullock die Frage beschäftigt sich topnur mit OP und möchte den Prozess basierend filtern top.
Pandya
@ Pandya, ich ziehe meinen vorherigen Kommentar zurück, da er auf einem Fehler in meinem Code beruhte. Trotzdem denke ich, dass @ Rameshs Antwort besser ist (und auch den Prozess nach oben filtert). Ich kann deine leicht brechen, zB mitsleep 10 & top | grep sleep
jb
Ich mag unix.stackexchange.com/a/165343/48973 besser, weil es die Überschriften zeigt.
Ryan
39

Nach meiner anderen Antwort hier könnten Sie etwas tun wie:

top -p `pgrep "java"`
Ramesh
quelle
4
top -p `pgrep "java"`gibt mir den folgenden Fehler in einer Bash-Shell top: -p requires argument. top -ppgrep -d ',' "apache2" hat für mich funktioniert, aber ich habe nicht wirklich verstanden, was der Befehl tat. Ist es eine Möglichkeit, mehrere Argumente nach oben einzugeben?
Michael Coleman
@Ramesh Sie müssen das pidListen-Komma getrennt eingeben, um zu funktionieren.
Kannan Mohan
3
Das ist die richtige Antwort.
j03m 08.08.16 Uhr
1
+1 Dies ist die richtige Antwort. "top | grep Chrome" ist ziemlich barbarisch, weil es die gesamte Ausgabe von oben wegschnappt und nicht mit "Chrome" übereinstimmt. Die Verwendung einer Subshell mit der Ausgabe von pgrep ist eine korrekte Anwendung der Unix-Philosophie.
John M Naglick
2
@loretoparisi Dies kann daran liegen, dass der von Ihnen verwendete Selektor mehreren Prozessen entspricht. In dieser Antwort finden Sie einen Befehl, der mit einem oder mehreren übereinstimmenden Prozessen funktioniert.
Michael Hays
21
top -p `pgrep -d "," java`

Erläuterung:

  1. top -p pid1,pid2: zeige mehrere Prozessinformationen, die pid sollte durch getrennt werden ,
  2. pgrep -d "," java: Gibt die Pids aller Java-Programme aus. Die Pids werden standardmäßig durch einen Zeilenumbruch getrennt. Verwenden Sie die -d ",", um es ,wie oben erforderlich zu trennen .

Wenn Sie Fehler wie sehen top: -p argument missing, bedeutet dies, dass kein Java-Programm ausgeführt wird, dh der pgrep hat keine Ausgabe.

Mingjiang Shi
quelle
1
Diese Lösung funktioniert besser als die ausschließliche Verwendung von top -p pgrep "java" ``. Dankeschön.
Loretoparisi
1
Verhindern Sie den Fehler, indem Sie pgrepden Exit-Code überprüfen :pids="$(pgrep -d, java)" && top -p "$pids"
syme
12

topDrücken Sie gin OpenBSD einfach und geben Sie den Befehlsnamen ein, nach dem Sie filtern möchten.

In topauf zB Ubuntu, drücken Sie ound geben Sie zum Beispiel COMMAND=chromezeigen , nur Einträge aus der COMMANDSpalte, die gleich sind chrome.

Lesen Sie unter Linuxes, die dieselbe topImplementierung wie Ubuntu verwenden, den Abschnitt FILTERING in a Window im topHandbuch.

Kusalananda
quelle
7

Andere gute Antworten wurden gegeben, aber ich habe vor einiger Zeit ein Skript erstellt, das ich ptop nannte und das mir gute Dienste leistet:

#!/bin/sh
top -p $(pidof "$@" |sed s#\ #,#g) 2>/dev/null
if [ $? -ne 0 ]; then
  echo No processes with the specified name\(s\) were found
fi

Dies unterstützt die Angabe mehrerer Prozessnamen (wie ptop bash chrome) und gibt eine schönere Fehlermeldung aus, falls keine Prozesse mit einem der angegebenen Namen ausgeführt werden.

Marcelo
quelle
3

Wenn Sie topim Kontext bleiben und alle anderen Prozesse im Blick behalten möchten , können Sie auf drücken L, um nach Ihrem Prozess zu suchen:

Locate string chrome

Dies hebt jeden Prozess mit chromeim Namen hervor und ruft ihn auf. Mit &zum nächsten Spiel wechseln.

Sie können drücken c, um zwischen der Anzeige des Prozessnamens und des vollständigen Befehls zu wechseln.

jonatan
quelle
Das ^ weil RTFM Leute! man top | less +/5d
Cprn
0

Sie können auch einen Filter oben verwenden, um bestimmte Prozesse zu isolieren. Drücken Sie 'O', um die Filterabfrage aufzurufen. Geben Sie dann einen Filter ein, der als FIELD = value formatiert ist. Verwenden Sie zum Filtern aller tmux-Prozesse beispielsweise Folgendes:

COMMAND=tmux

Verwenden Sie '=', um die Filter zurückzusetzen. Siehe den Abschnitt mit dem Titel 'FILTERING' in der oberen Manpage.

Gearoid Murphy
quelle