Vordergrundprozess mit ps anzeigen

Vordergrundprozess mit ps anzeigen

Ich kann den Hintergrundprozess mit ps sehen. Aber gibt es eine Möglichkeit, den Vordergrundprozess anzuzeigen? Zum Beispiel:

$nohup Prozess1 &

Dann

ps -ef | grep "Prozess1"

würde den Prozess "process1" in Ausführung anzeigen. Aber der obige Befehl würde keinen Vordergrundprozess anzeigen, der wie folgt ausgeführt wird:

$Prozess2

Antwort1

Sie könnten verwirrt sein, weil psstandardmäßig die Prozesse angezeigt werden, die sich auf demselben Terminal befinden, auf dem pssie aufgerufen werden, z. B. Prozesse, die aus demselben Terminalfenster gestartet wurden.

Versuchen Sie es mit ps -u $LOGNAMEoder , wenn Sie die Terminalnamen kennen ps -t $THETTYNAME1,$THETTYNAME2. (Die Terminalnamen sehen normalerweise wie „ttyN“ oder „pts/N“ aus.)

Antwort2

Seltsamerweise können Sie mit dem Befehl ps den Status aller aktiven Prozesse überwachen, sowohl im Vordergrund als auch im Hintergrund.

Beispielsweise starte ich in einer ersten Shell folgenden Vorgang:

$ startNetworkServer 
Security manager installed using the Basic server security policy.
Apache Derby Network Server - 10.3.2.1 - (599110) started and ready to accept connections on port 1527 at 2010-06-18 14:14:33.277 GMT 

Und in einer anderen Shell:

$ ps aux  | grep NetworkServer | grep -v grep
pascal    5928  0.3  1.4 661492 29216 pts/0    Sl+  16:14   0:03 /usr/lib/jvm/java-6-sun/bin/java -classpath /usr/share/javadb/lib/derby.jar:/usr/share/javadb/lib/derbynet.jar:/usr/share/javadb/lib/derbytools.jar:/usr/share/javadb/lib/derbyclient.jar org.apache.derby.drda.NetworkServerControl start

Der Prozess wird wie erwartet aufgelistet (und +zeigt, dass er sich in der Vordergrundprozessgruppe befindet).

Antwort3

Die Frage:

„Gibt es eine Möglichkeit, den Vordergrundprozess anzuzeigen?“In der Frage wird dann weiter behauptet, dass ps -efim Vordergrund laufende Prozesse nicht angezeigt werden.

Antwort:

Ja, es gibt einen Weg. Außerdem:ps -ef tutim Vordergrund laufende Prozesse anzeigen -aber es zeigt nicht dieZustandder Prozesse. Dies wird in der Dokumentation ( man ps) erklärt und kann in einem einfachen Experiment überprüft werden. Betrachten Sie dieses Beispiel:

Führen Sie in einem Terminal Folgendes aus:

ping 8.8.8.8 > /dev/null

In einem anderen Terminal:

ps -ef | grep ping | grep -v grep
seamus        1161   974  0 23:20 pts/1    00:00:00 ping 8.8.8.8

Beachten Sie, dass ps -efnichtZustandInformationen in seiner Ausgabe. Allerdings man pserklärt dasZustandInformationist verfügbarVerwenden Sie das -oArgument in Kombination mit dem Schlüsselwort stat:

ps -eo pid,stat,command | grep ping | grep -v grep
 1161 S+   ping 8.8.8.8

Das sagt uns:

  • die Prozess-PID erfolgt 1161über das Schlüsselwortpid
  • der ProzessZustanderfolgt S+über Schlüsselwortstat
  • das commandSchlüsselwort zeigt ping 8.8.8.8den Prozess hervorgebracht

DerZustandWert von S+istdekodiertunter man psder Überschrift PROCESS STATE CODE. was uns sagt:

S unterbrechbarer Schlaf (Warten auf den Abschluss eines Ereignisses)
+ befindet sich in der Vordergrundprozessgruppe

QED

Wir haben gesehen, dass ps -efdie Prozesse aufgelistet werden, deren PID ist 1161, und das ps -eo pid,stat,commandzeigt dieZustandvon PID 1161alsVordergrundVerfahren.


ANMERKUNG 1: Schlüsselwörterfür das -oArgument sind man psunter der Überschrift beschrieben STANDARD FORMAT SPECIFIERS. Hier wird erklärt, dass das Schlüsselwort statden zweistelligen Prozess ergibtZustand, während das Schlüsselwort statenur das einstelligeZustand.

ANMERKUNG 2:Dies funktioniert auf meinem Debian-basierten System (gemeldet als Version ps from procps-ng 3.3.15) und in macOS 10.15 (das von der BSD-Version von abstammt ps).

verwandte Informationen