Warum zeigt `ps -e | less` bei Prozessen „less“ an?

Warum zeigt `ps -e | less` bei Prozessen „less“ an?

Ich führe aus ps -ejH | less. Die Ausgabe enthält außerdem psund .less

Was ist der Grund? Ich dachte, es würde folgendermaßen funktionieren:

  1. Zuerst pswird es ausgeführt und es werden alle zu diesem Zeitpunkt vorhandenen Prozesse aufgelistet.
  2. Dann pswird die Ausgabe von in eingespeist less.

Aber gemäß dieser Logik sollte weder „ psnot“ lessin der Ausgabe von erscheinen ps.

Warum sind diese Prozesse also in der Ausgabe von enthalten ps? psFunktioniert es etwas anders, als ich es beschrieben habe?

Antwort1

DerHülseBeginnt man beide Enden der Leitung, pssieht man sich selbst sowie den Vorgang am anderen Ende der Leitung.

Antwort2

„Aber dieser Logik zufolge sollte in der Ausgabe von ps weder ps noch less erscheinen.“

Ja, Ihre Logik ist also falsch, weil beide vorkommen. Wenn Sie einen Befehl in einer Un*x-Shell ausführen, werden nur sehr wenige (wenn überhaupt) tatsächlich in der Shell ausgeführt. Um diesen Befehl auszuführen, wird ein separater Prozess geforkt.

Wenn Sie zwei Befehle zusammen über eine Pipe weiterleiten, werden beide Befehle in separaten Prozessen gestartet und die Standardausgabe des ersten Befehls wird mit der Standardeingabe des zweiten Befehls verknüpft.

Kurz nachdem Sie ps|less ausgeführt haben, haben Sie also drei Prozesse: einen, der Ihre Shell ausführt, einen, der ps ausführt, und einen, der less ausführt. Da die Ausgabe von ps generiert wird, wird sie parallel (nach Bedarf in Zeitscheiben aufgeteilt) von less bearbeitet. Beide Befehle werden parallel und nicht nacheinander ausgeführt, mit minimaler Pufferung.

Während ps die Prozessliste durchläuft, findet und zeigt es sowohl sich selbst als auch less an, außerdem die übergeordnete Shell und die übergeordnete Shell des übergeordneten Elements und so weiter bis zu init. Und alles andere auf dem System. Deshalb enthält Ihre Ausgabe sowohl ps als auch less.

Antwort3

Verwenden

ps -ef | grep [l]ess

weniger zu vermeiden.

  • [l]essÜbereinstimmung lessals regulärer Ausdruck, aber nicht als feste Zeichenfolge.

verwandte Informationen