Was genau bedeutet es, wenn eine Sitzung „im Hintergrund läuft“?

Was genau bedeutet es, wenn eine Sitzung „im Hintergrund läuft“?

Ich verwende derzeit einen SSH-Client, um mich mit einem Server zu verbinden, den mein Labor verwendet. Ich hatte eine Frage zum Konzept einer „im Hintergrund laufenden Sitzung“. Ich habe mir eine Frage in dieser Community angesehen (was ist ein Hintergrundprozess?), aber ich habe das Gefühl, dass es etwas anders ist, als ich es mir frage.

Der Server, mit dem wir arbeiten (ich bin nicht sicher, ob es am Server oder an der Internetverbindung liegt), weist einige Probleme auf. Wenn wir beispielsweise einen Prozess über Nacht laufen lassen und am Morgen wiederkommen, werden die Shell-Sitzungen getrennt.

Eine Lösung, die jemand vorgeschlagen hat, ist die Verwendung des ProgrammsTmuxum dieses Problem zu umgehen. Das Programm soll eine Sitzung trennen, sodass unser Prozess auch dann nicht gestört wird, wenn der Server die Verbindung trennt.

Ich habe mich nur gefragt, was genau es bedeutet, wenn ein Prozess auf diese Weise „im Hintergrund läuft“. Ist das dasselbe wie die Frage, die ich oben verlinkt habe, und verstehe ich sie einfach falsch? Und was bedeutet es, eine Sitzung „anzuhängen oder abzutrennen“?

Ich schätze, meine Verwirrung rührt daher, dass ich nicht verstehe, wie eine Sitzung ausgeführt werden kann, wenn die Shell die Verbindung trennt.

Danke!

Antwort1

Sie haben Schwierigkeiten mit dem Konzept, weil es ein solches Konzept nicht gibt. Prozessgruppenkann im Hintergrund/Vordergrund sein. Das Konzept gilt nicht fürSitzungen, weder das, was das Betriebssystem als Sitzungen bezeichnet, noch das, was tmuxSitzungen aufruft, was zwei sehr unterschiedliche Dinge sind.

Was tmuxSie tun, ist, ein oder mehrere Pseudoterminals zu erstellen, die die darin laufenden Programme tmuxals ihre Steuerterminals (und zunächst als Standardeingaben, -ausgaben und -fehler) betrachten. EsMultiplexediese inneren Anschlüsse auf einen einzigenäußereTerminal. Dabei handelt es sich um das Pseudoterminal, das vom SSH-Server auf Ihrem Computer eingerichtet wurde, als Sie sich über SSH angemeldet haben.

Es gibt zwei tmuxProzesse, einen langlebigenServerdas mit den Backends (also den „Master“-Seiten, um eine nicht mehr zeitgemäße Terminologie zu verwenden) aller dieser inneren Pseudoterminals verbunden ist, und einemKlientdas ist der Vermittler zwischen diesem Server und dem realisierten äußeren Terminal. Tatsächlich kann es mehrere Clients geben, aber das ist eine Komplexität, die wir hier übergehen können, da sie nichts am Kern ändert.

DerServerDer Prozess existiert, solange mindestens ein inneres Pseudoterminal übrig ist. Er gruppiert die Pseudoterminals in Sammlungen, die aufgerufen tmuxwerdenSitzungen. Dies ist nicht zu verwechseln mit dem, was Ihr Betriebssystem eine Sitzung nennt (eine Sammlung von Prozessgruppen und optional ein steuerndes Terminal) oder eineSitzungüber SSH (zwischen dem Remote-SSH-Server und Ihrem lokalen SSH-Client). „Sitzung“ kann viele verschiedene Dinge bedeuten. Beachten Sie, dass ich es tmuxhier unterschiedlich mit „ “, „SSH“ und „Betriebssystem“ qualifiziere.

DerKlientProzess ist vorübergehend und verschwindet —Ablösenvon der tmuxSitzung und dem Server – mit dem Verlust der SSH-Verbindung. Wenn Sie sich erneut mit SSH anmelden, erstellen Sie eineneuKunde, derwieder anbringenzu (einer tmuxvom) Server verwalteten Sitzung, und dieser neue Client erkennt die Benutzeroberfläche des tmuxServers – alleFensterin der tmuxSitzung und der Statuszeile – auf das neue Pseudoterminal für Ihre neue SSH-Anmeldesitzung. Ein Client führt tmuxjeweils eine Sitzung durch, diejenige, mit der er aktuell verbunden ist.

Der Client-Prozess ist Teil dessen, was das Betriebssystem eine Sitzung nennt. Die Sitzung wird gesteuert durchäußerePseudoterminal, das von Ihrem SSH-Server für die SSH-Anmeldung erstellt wird. Es unterliegt der Lebensdauer dieser Betriebssystemsitzung, die wiederum der Lebensdauer der SSH-Sitzung unterliegt, und kann sich in der Hintergrund- oder Vordergrundprozessgruppe befindendieses äußeren Terminals. Es unterliegt (damit)Shell-Job-Steuerungder Login-Shell dieser SSH-Sitzung.

Der Serverprozess ist vollständig vom äußeren Terminal und seinen Betriebssystemsitzungen getrennt. Er unterliegt nicht deren Lebensdauer. Er istnicht inihre Hintergrund- oder Vordergrundprozessgruppen. Ihre Lebensdauer wird ausschließlich durch die weitere Existenz voninnereTerminals, deren I/O es den tmuxClients zur Verfügung stellt.

Es gibtinnereUndäußereTerminals. Es gibtbeigefügtUndlosgelöst tmuxSitzungen, durch Erweiterung von Clients, die sich an tmuxServer anschließen und von ihnen trennen. Es gibtaktivUndinaktivFenster innerhalb einer tmuxSitzung. Das Shell-Job-Control-Konzept vonHintergrundUndVordergrundist nicht beteiligt.

Antwort2

Man kann in zweierlei Hinsicht sagen, dass Unix-Prozesse „im Hintergrund laufen“:

  1. Immer noch von einem anderen Prozess wie der Shell gesteuert. Folgendes passiert, wenn Sie den &Operator in Bourne-Shells verwenden:

    sleep 10 &
    

    Dieser sleepProzess wird von der Shell im Hintergrund ausgeführt, sodass er weiter ausgeführt wird, Sie jedoch mit der Shell-Eingabeaufforderung interagieren und andere Befehle ausführen können. Wenn ein im Hintergrund laufendes Programm wie dieses versucht, eine Eingabe zu lesen, wird es mit dem SIGTTINSignal gestoppt.

    Wichtig ist jedoch, dass es immer noch zum Shell-Prozess gehört, wo es gestartet wurde, und immer noch mit dem TTY (dem Terminal, auf dem es ausgeführt wird) verbunden ist. Wenn das TTY geschlossen wird (die SSH-Verbindung wird unterbrochen und die Shell wird beendet), wird der Prozess mit beendet SIGHUP.

    Dies wird als Shell-Job-Steuerung bezeichnet – Prozesse können mit &oder bgoder in den Hintergrund gestellt und mit und aufgelistet usw. ^Zwieder in den Vordergrund gebracht werden . Es ist eigentlich dafür gedacht, einen Befehl vorübergehend in den Hintergrund zu stellen, während Sie an einem anderen arbeiten, und nicht für lang laufende Prozesse, die sicher sein müssen, wenn die Shell beendet wird und das Terminal verschwindet.fgjobs

  2. Ein Daemon-Prozess. Dies ist ein Prozess, der sich vollständig vom übergeordneten Prozess und seinen TTYs löst. Er hat eine neue Prozessgruppe und Sitzungs-ID und sein übergeordneter Prozess ist PID 1 (normalerweise init, obwohl er unter modernem Linux systemddiese Rolle meines Wissens übernommen hat). Da ein Daemon-Prozess nicht von der Shell als übergeordneter Prozess definiert wird und nicht an ein TTY angehängt ist, wird er nicht beendet, wenn die Shell beendet oder das TTY geschlossen wird. Er muss explizit vom System oder vom Benutzer beendet werden. Die meisten Unix-Systeme werden mit vielen Standard-Daemons für alle möglichen Aufgaben ausgeliefert.

Dies ist eine umfassende Erklärung und es gibt viele Details zur Shell-Job-Steuerung und zu Daemon-Prozessen, die ich nicht erwähnt habe.

Es gibt ein Programm namens nohup, das ein Programm ausführen kann, indem es (1) das SIGHUPSignal ignoriert, sodass es nicht beendet wird, wenn das TTY geschlossen wird. Dies macht es nicht zu einem echten Daemon, ist aber gut für einfache Aufgaben, die nur Ausgaben liefern und niemals Eingaben erfordern.

tmux ist ein Programm, das als Daemon ausgeführt wird, aber die Ausführung anderer Programme (Shells oder andere) ermöglicht. tmux ist viel ausgefeilter als andere Programme nohup– Sie können Vollbildprogramme und Programme ausführen, die sowohl Eingabe als auch Ausgabe erfordern. Da es sich um einen Daemon handelt, wird es nicht beendet, wenn das TTY verschwindet (z. B. wenn die SSH-Verbindung abbricht).

In tmux bedeutet „angehängt“, dass tmux einen oder mehrere der darin laufenden Prozesse auf einem Terminal anzeigt. Sie können tmux von diesem Terminal „abtrennen“ und es später wieder an ein anderes Terminal „anhängen“. Das Abtrennen erfolgt automatisch, wenn die SSH-Verbindung abbricht oder beendet wird. Sie können also Ihr Terminal und SSH schließen, sich später von einem anderen Terminal aus verbinden und tmux anhängen und alles ist wie es war.

verwandte Informationen