Wie finde ich noch laufende Prozesse in einem Terminal?

12

Wenn ich versuche, eine Registerkarte in Gnome Terminal zu schließen, heißt es:

Dieses Terminal schließen? In diesem Terminal wird noch ein Prozess ausgeführt. Durch Schließen des Terminals wird es getötet.

Wie kann ich herausfinden, was noch läuft? Beachten Sie, dass die Ausgabe von nichts enthält jobs. Vielen Dank.

Tim
quelle
1
Wenn Sie sich an der Shell-Eingabeaufforderung befinden, während diese Meldung angezeigt wird, handelt es sich wahrscheinlich um eine verschachtelte Shell (nicht die, die direkt vom Terminalemulator gestartet wurde). Eine Vielleicht haben Sie begonnen screen, tmux, script, ssh, mcund drehte die Platten aus, oder einfach nur eine andere Shell zum Beispiel durch die Eingabe bash, oder etwas in diese Richtung. Drücken Sie Strg + D oder geben Sie ein exit, um die Shell zu beenden. Sie sehen, wo Sie landen.
Egmont
Vielen Dank. nach exit, hat die Gnom Endanschlussstreifen nicht schließen.
Tim
1
Eine Sekunde exitwird es dann wahrscheinlich schließen. @egmont können Sie dies bitte zu einer Antwort verschieben.
Videonauth

Antworten:

12
ps T

Wählt alle dem Terminal zugeordneten Prozesse aus.

tmcp
quelle
Gut, obwohl es ein bisschen täuscht. Über den nohupBefehl erzeugte Prozesse werden vom Terminal getrennt, blockieren Sie also nicht dessen Schließen. Mit diesem Befehl werden sie jedoch weiterhin aufgelistet.
Sergiy Kolodyazhnyy
Oder einfach nur ps für diese Angelegenheit
user10089632
1

Sie können einen Blick auf die Prozesse werfen, die die PID Ihrer Shell als übergeordnetes Element auflisten. Wie Sie vielleicht wissen oder nicht, können wir das psFormat angeben

SHELLPID=$$ ; ps -e  -o cmd,pid,ppid | awk -v shell=$SHELLPID  '$NF~shell'   

Hier erhalten wir die PID der Shell von einer speziellen Variablen $$in SHELLPID, die dann von awk in der Subshell der Pipe verwendet werden kann. Im Wesentlichen listen wir nur Prozesse in Form von NAME, PID, übergeordneter PID auf und filtern nur diejenigen heraus, die die entsprechende PID in der letzten Spalte haben.

Sergiy Kolodyazhnyy
quelle
1

Wenn Sie einen Prozess im Terminal (z. B. gedit) gestartet haben, sind die Prozess-ID (PID) (von bash) und die übergeordnete Prozess-ID (PPID) (von gedit) für diese beiden Prozesse identisch. Dies ist in der Ausgabe von zu sehen

ps -ef

Befehl. Um die Lesbarkeit zu verbessern, "leiten" Sie zuerst die Ausgabe, grepum die PID aller aktuell ausgeführten "Bash" -Prozesse zu ermitteln, und "leiten" Sie sie dann erneut an awk. Das awkwählt nur die Felder PID und Prozessname (Feld 2 und 8) aus und gibt sie auf dem Bildschirm aus.

ps -ef | grep bash | awk '{print $2 ": " $8}'

Die Nummer im Ausgang ist PID. Sie werden es verwenden, um herauszufinden, welcher Prozess in einem Terminal mit dieser PID gestartet wurde. Beachten Sie, dass es mehr als eine Ausgabezeile geben kann, wenn Sie mehr als ein Terminal geöffnet haben. Um nun die "untergeordneten" Prozesse (falls vorhanden) dieser Terminalsitzungen zu finden, können wir diesen Befehl verwenden:

ps -ef | awk '{if ($3 == EnterPID) print $2 ": " $8;}'

Sie müssen im letzten Befehl die PID-Nummer anstelle von EnterPID eingeben. Wenn es mehr als eine PID für "Bash" gibt, müssen Sie alle ausprobieren.

Der letzte Befehl überprüft nur die Ausgabe von ps -efund sucht, ob PID (die Sie aus dem vorherigen Befehl gefunden haben) und PPID für jeden Prozess gleich sind.

Mehr Info:

Mann ps

Mann awk

NonStandardModel
quelle
-1

Sie können verwenden htop. In Ubuntu 16.04 (und höher) können Sie es einfach durch Eingabe installieren sudo apt-get install htop.

Sie können auch verwenden top.

Rangerix
quelle
Und wie würden Sie die Prozesse im aktuellen Terminal mit identifizieren htop?
Muru