Wie kann ich in der Befehlsausgabe „ps“ oder „ps -ef“ erkennen, ob ein Prozess im Hintergrund oder im Vordergrund ausgeführt wird?

Wie kann ich in der Befehlsausgabe „ps“ oder „ps -ef“ erkennen, ob ein Prozess im Hintergrund oder im Vordergrund ausgeführt wird?

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. jobswird hier nicht verwendet.

Antwort1

Das statFeldhat 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 psalsZustanddes Prozesses. man pslistet dieseProzesszuständeunter der Überschrift PROCESS STATE CODE.

ps -efmeldet keinen Prozessstatus, aber man pswir finden im OUTPUT FORMAT CONTROLAbschnitt, dass das -oArgument 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, statund 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:psbegünstigt den fleißigen Benutzer.

psDer folgende Befehl gibt beispielsweise diePID, DieZustand, und dasBefehlder den Prozess startete, indem erSchlüsselwörter pid, statUnd 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 ist12518
  • der ProzessZustandist S+(über Schlüsselwort stat)
  • der commandAuslö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 psder Ü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 San 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).

verwandte Informationen