GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Einen Linux-Prozess laufen lassen, nachdem ich mich abgemeldet habe

Lösung 1:

Am besten starten Sie den Vorgang in einem Terminal-Multiplexer. Alternativ können Sie dafür sorgen, dass der Prozess das HUP-Signal nicht empfängt.

Ein Terminal-Multiplexer stellt "virtuelle" Terminals bereit, die unabhängig vom "echten" Terminal laufen (eigentlich sind heute alle Terminals "virtuell", aber das ist ein anderes Thema für einen anderen Tag). Das virtuelle Terminal läuft auch dann weiter, wenn Ihr reales Terminal mit Ihrer SSH-Sitzung geschlossen wird.

Alle vom virtuellen Terminal gestarteten Prozesse werden mit diesem virtuellen Terminal weiter ausgeführt. Wenn Sie sich wieder mit dem Server verbinden, können Sie sich wieder mit dem virtuellen Terminal verbinden und alles wird so sein, als ob nichts passiert wäre, außer der verstrichenen Zeit.

Zwei beliebte Terminal-Multiplexer sind screen und tmux.

Bildschirm hat eine steile Lernkurve. Hier ist ein gutes Tutorial mit Diagrammen, die das Konzept erklären:http://www.ibm.com/developerworks/aix/library/au-gnu_screen/

Das HUP-Signal (oder SIGHUP) wird vom Terminal an alle untergeordneten Prozesse gesendet, wenn das Terminal geschlossen wird. Die übliche Aktion beim Empfang von SIGHUP ist die Beendigung. Wenn also Ihre SSH-Sitzung getrennt wird, werden alle Ihre Prozesse beendet. Um dies zu vermeiden, können Sie dafür sorgen, dass Ihre Prozesse kein SIGHUP empfangen.

Zwei einfache Methoden dazu sind nohup und disown .

Weitere Informationen darüber, wie nohup und disown funktioniert, lesen Sie diese Frage und beantworten Sie sie:https://unix.stackexchange.com/questions/3886/difference-between-nohup-disown-and

Hinweis:Obwohl die Prozesse weiter ausgeführt werden, können Sie nicht mehr mit ihnen interagieren, da sie nicht mehr mit einem Terminal verbunden sind. Diese Methode ist vor allem für langlaufende Batch-Prozesse sinnvoll, die nach dem Start keine Benutzereingaben mehr benötigen.

Lösung 2:

Es gibt ein paar Möglichkeiten, dies zu tun, aber am nützlichsten finde ich die Verwendung von GNU Screen.

Nachdem Sie sich per SSH angemeldet haben, führen Sie screen aus . Dadurch wird eine andere Shell gestartet, die innerhalb des Bildschirms ausgeführt wird. Führen Sie Ihren Befehl aus und führen Sie dann ein Strg aus -a d .

Dadurch werden Sie von der Bildschirmsitzung "getrennt". An dieser Stelle können Sie sich abmelden oder alles tun, was Sie möchten.

Wenn Sie sich wieder mit der Bildschirmsitzung verbinden möchten, führen Sie einfach screen -RD aus von der Shell-Eingabeaufforderung (als derselbe Benutzer, der die Sitzung erstellt hat).

Lösung 3:

In bash , die disown Stichwort ist dafür perfekt geeignet. Führen Sie zuerst Ihren Prozess im Hintergrund aus (verwenden Sie entweder & , oder ^Z Geben Sie dann bg ein ):

$ wget --quiet http://server/some_big_file.zip &
[1] 1156

Durch Eingabe von jobs Sie können sehen, dass der Prozess immer noch der Shell gehört:

$ jobs
[1]+  Running  wget

Wenn Sie sich an dieser Stelle abmelden, wird auch die Hintergrundaufgabe beendet. Wenn Sie jedoch disown ausführen , bash trennt den Job und lässt ihn weiterlaufen:

$ disown

Sie können dies bestätigen:

$ jobs
$ logout

Sie können sogar die & kombinieren und disown in der gleichen Zeile, wie:

$ wget --quiet http://server/some_big_file.zip & disown
$ logout

Das ist besser als nohup auszuführen meiner Meinung nach, weil es nohup.out nicht verlässt Dateien, die überall in Ihrem Dateisystem verstreut sind. Außerdem nohup muss ausgeführt werden, bevor Sie den Befehl ausführen – disown kann verwendet werden, wenn Sie erst später entscheiden, dass Sie die Aufgabe in den Hintergrund stellen und trennen möchten.

Lösung 4:

Das Tool nohup, das auf den meisten Linux-Systemen verfügbar ist, erledigt dies.

Lösung 5:

Nur um gründlich zu sein, weise ich auf tmux hin, das die gleiche Grundidee wie screen hat:

tmux soll eine moderne, BSD-lizenzierte Alternative zu Programmen wie GNU Screen sein. Zu den Hauptfunktionen gehören:

  • Eine leistungsstarke, konsistente, gut dokumentierte und leicht skriptfähige Befehlsschnittstelle.
  • Ein Fenster kann horizontal und vertikal in Bereiche geteilt werden.
  • Bereiche können frei verschoben und in der Größe verändert oder in voreingestellten Layouts angeordnet werden.
  • Unterstützung für UTF-8- und 256-Farbterminals.
  • Kopieren und Einfügen mit mehreren Puffern.
  • Interaktive Menüs zur Auswahl von Fenstern, Sitzungen oder Clients.
  • Ändern Sie das aktuelle Fenster, indem Sie im Ziel nach Text suchen.
  • Terminalsperre, manuell oder nach einer Zeitüberschreitung.
  • Eine saubere, leicht erweiterbare, BSD-lizenzierte Codebasis, die aktiv weiterentwickelt wird.

Es ist jedoch ungefähr unendlich einfacher, bei Google danach zu suchen.


Linux
  1. Linux-Tipps zur Verwendung von GNU Screen

  2. Wie kann man einen laufenden Prozess unter Linux neu starten (oder zurücksetzen)?

  3. Wie beendet man einen Prozess, der auf einem bestimmten Port in Linux läuft?

  4. in der Linux-Konsole, wie man die Ausgabe NICHT umschließt

  5. Verhindert, dass die aktuell ausgeführte Linux-Aufgabe nach dem Abmelden von SSH beendet wird

So listen Sie laufende Prozesse in Linux auf

So listen Sie laufende Prozesse in Linux auf:Ein Leitfaden für Anfänger

15 Linux-Bildschirmbefehl zum Behandeln von Terminalsitzungen

So beenden Sie den laufenden Linux-Prozess auf einem bestimmten Port

Beispiele für Bildschirmbefehle:Holen Sie sich die Kontrolle über das Linux / Unix-Terminal

So löschen Sie das Terminal unter Linux {Bildschirm in Linux löschen}