Shell beenden, während der Prozess im Vordergrund läuft

Shell beenden, während der Prozess im Vordergrund läuft

Ich habe einen Prozess im Vordergrund laufen. Ich frage mich, ob es möglich ist, Bash zu beenden,

  1. ohne (natürlich) den Vordergrundprozess zu beenden und wie gewohnt zu beenden, und
  2. ohne das Terminalprogramm zu beenden, oder, wenn die Verbindung remote über einen Client (wie iTerm2 oder PuTTY) erfolgt, ohne den besagten Client zu beenden.

Ich weiß, dass ich, wenn ich keinen Vordergrundprozess laufen habe, das Ende der Übertragung problemlos mit Strg+d oder durch die Ausgabe von senden kann exit. Ich möchte wissen, ob dies bei einem laufenden Vordergrundprozess möglich ist.

Antwort1

Der Vordergrundprozess ist für die folgenden Servereigenschaften bestimmt und diese sind an das Terminal gebunden.

  • um mit dem Benutzer zu interagieren.
  • um Texteingaben an das Master-Pseudogerät weiterzuleiten, damit diese von der Shell (z. B. Bash) verwendet werden können, die mit dem Slave-Pseudogerät verbunden ist.
  • um die Textausgabe vom Master-Pseudogerät zu lesen und dem Benutzer anzuzeigen.

Ich denke also, dass das nicht möglich ist. Oder führen Sie Ihren Prozess als Daemon aus und geben Sie die Ausgabe an ein bestimmtes Terminal und/oder eine bestimmte Datei weiter, wie dies beim Installationsprozess der Fall ist.

Antwort2

Zusätzlich zu screen/ tmuxgibt es auch nohup. Es ist einfacher, aber manchmal besser, je nach Ihrer genauen Situation. Siehe hier:nohup vs. Bildschirmfür mehr Details.

Beachten Sie, dass nohupder Prozess zwar im Vordergrund bleibt, Sie jedoch nicht mit ihm interagieren oder die Ausgaben auf dem Terminal sehen können. Um den Prozess im Hintergrund zu starten, fügen Sie &beim Starten des Prozesses hinzu (z. B. nohup <your command here> &).

Wenn der Prozess bereits ausgeführt wird, nohupkönnen Sie wieder auf das Terminal zugreifen, indem Sie Ctrl+Z(Prozess stoppen) und anschließend bgden Befehl (gestoppten Prozess in den Hintergrund senden) drücken.

BEARBEITEN(nach OP-Kommentar): Ich bin nicht sicher, ob ich das Szenario verstehe, aber vielleicht könnten Sie Folgendes versuchen:

  1. Terminalfenster öffnen (darin wird eine Shell gestartet)
  2. Starten Sie explizit eine andere Shell (z. B. Bash) innerhalb dieses Fensters
  3. Starten Sie Ihren Vordergrundprozess in der zweiten Shell (ohne nohups usw.).
  4. Öffnen Sie ein weiteres Terminalfenster
  5. Identifizieren Sie die „mittlere“ Shell (dies ist der übergeordnete Prozess des getesteten Prozesses).
  6. Sende ein Kill-Signal an die „mittlere“ Shell.

Dadurch wird der getestete Prozess zu einem „Semi-Daemon“ und Sie erhalten Zugriff auf die Shell der obersten Ebene im ersten Terminalfenster. Beachten Sie, dass der getestete Prozess noch an das Terminal angeschlossen ist und daher beendet wird, wenn Sie das Fenster schließen.

verwandte Informationen