Wie kann ich in Befehlen usw. erkennen, ob ein Prozess im Hintergrund oder im Vordergrund ausgeführt wird ps
?ps -ef
Ich dachte zuerst, wenn ich eingebe ps -ef
, gäbe es einen Abschnitt namens TTY. Wenn ich mir die Liste der TTYs anschaue, sind die meisten von ihnen ?
. Ich frage mich, ob dieses Fragezeichen bedeutet, dass der Prozess im Hintergrund läuft.
Ich möchte überprüfen, ob ich Recht habe! Wenn nicht, möchte ich wissen, wie ich feststellen kann, ob der Prozess im Hintergrund oder im Vordergrund ausgeführt wird.
Der Befehl ps. jobs
wird hier nicht verwendet.
Antwort1
Das stat
Feldhat ein Extra +
für Vordergrundprozesse:
ps -e -o pid,tty,stat,cmd
Vordergrundprozesse sind solche, deren Prozessgruppen-ID ( pgid
) der Vordergrundprozess auf dem Terminal ( tpgid
) entspricht:
ps -e -o pid,pgid,tpgid,tty,cmd | awk '$2==$3'
wenn ich mir die Liste der TTYs anschaue, sind die meisten davon '?' (Fragezeichen). Ich frage mich, ob dieses Fragezeichen bedeutet, dass der Prozess im Hintergrund läuft
Nein, das bedeutet, dass sie kein steuerndes TTY haben (Daemons oder Kernel-Threads, weder Vordergrund noch Hintergrund). Eine Liste derHintergrundProzesse:
ps -e -o pid,pgid,tpgid,tty,cmd | awk '$3!=-1 && $2!=$3'
Antwort2
Der OP fragte: „… wie kann ich wissen, ob der Prozess im Hintergrund oder im Vordergrund läuft?“
Der Vordergrund- und Hintergrundstatus einesVerfahrenwerden gemeldet von ps
alsZustanddes Prozesses. man ps
listet dieseProzesszuständeunter der Überschrift PROCESS STATE CODE
.
ps -ef
meldet keinen Prozessstatus, aber man ps
wir finden im OUTPUT FORMAT CONTROL
Abschnitt, dass das -o
Argument verwendet werden kann, um die Ausgabe von ps
über einen oder mehrereSchlüsselwörter. DieseSchlüsselwörtersind in diesem Abschnitt aufgeführt STANDARD FORMAT SPECIFIERS
, und mit außergewöhnlicher Beharrlichkeit wird man schließlich die aufgeführten Schlüsselwörter s
, stat
und finden state
. Beachten Sie jedoch, dass alle drei dieserSchlüsselwörterwird bereitstellenZustandin der Ausgabe nur diestat
Stichwortwird das geben multi-character process state
! Das Fazit:ps
begünstigt den fleißigen Benutzer.
ps
Der folgende Befehl gibt beispielsweise diePID, DieZustand, und dasBefehlder den Prozess startete, indem erSchlüsselwörter pid
, stat
Und command
:
ps -eo pid,stat,command
Um zu sehen, wie das funktioniert, betrachten Sie dieses Beispiel:
Führen Sie in einem Terminal diesen Befehl aus:
ping 8.8.8.8 > /dev/null
In einem anderen Terminal:
ps -eo pid,stat,command | grep ping | grep -v grep
12518 S+ ping 8.8.8.8
Daraus erfahren wir:
- der PID ist
12518
- der ProzessZustandist
S+
(über Schlüsselwortstat
) - der
command
Auslöser dieses Prozesses warping 8.8.8.8
Es ist noch ein weiterer Schritt erforderlich, um zu erfahren, ob dieser Prozess im Vordergrund oder im Hintergrund stattfindet: DieZustandWert von S+
muss seindekodiertunter man ps
der Überschrift PROCESS STATE CODE
- was uns sagt:
S unterbrechbarer Schlaf (Warten auf den Abschluss eines Ereignisses)
+ befindet sich in der Vordergrundprozessgruppe
Folglich sehen wir +
an der zweiten Zeichenposition, dass dieser Prozess in derVordergrund. Ein Hintergrundprozess kann mit einem S
an der ersten Stelle und nichts an der zweiten Stelle aufgeführt sein. Es gibt mehrere andere Zeichenkombinationen, die auf einen Hintergrundprozess hinweisen; sieheDasfür eine Auflistung.
Zur Info: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
).