
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 ps
standardmäßig die Prozesse angezeigt werden, die sich auf demselben Terminal befinden, auf dem ps
sie aufgerufen werden, z. B. Prozesse, die aus demselben Terminalfenster gestartet wurden.
Versuchen Sie es mit ps -u $LOGNAME
oder , 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 -ef
im 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 -ef
nichtZustandInformationen in seiner Ausgabe. Allerdings man ps
erklärt dasZustandInformationist verfügbarVerwenden Sie das -o
Argument 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
command
Schlüsselwort zeigtping 8.8.8.8
den Prozess hervorgebracht
DerZustandWert von S+
istdekodiertunter man ps
der Ü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 -ef
die Prozesse aufgelistet werden, deren PID ist 1161
, und das ps -eo pid,stat,command
zeigt dieZustandvon PID 1161
alsVordergrundVerfahren.
ANMERKUNG 1: Schlüsselwörterfür das -o
Argument sind man ps
unter der Überschrift beschrieben STANDARD FORMAT SPECIFIERS
. Hier wird erklärt, dass das Schlüsselwort stat
den zweistelligen Prozess ergibtZustand, während das Schlüsselwort state
nur 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
).