So starten Sie den Linux-Befehl im Hintergrund und trennen den Prozess im Terminal

In dieser Anleitung erfahren Sie, wie Sie einen Befehl im Hintergrund ausführen und die Prozesse vom Terminal trennen.

Voraussetzungen:

Um die Schritte in dieser Anleitung auszuführen, benötigen Sie die folgenden Komponenten:

  • Ein funktionsfähiges Linux-System. Erfahren Sie mehr über das Einrichten einer Ubuntu-VM auf VirtualBox.
  • Zugriff auf einen Nicht-Root-Benutzer mit Sudo-Berechtigung.

Ausführen der Prozesse vom Terminal aus

Immer wenn ein Befehl ausgeführt wird, werden die Prozesse unter dem Terminal erzeugt. Wird das Terminal geschlossen, werden alle zugehörigen Prozesse automatisch beendet. In bestimmten Situationen kann es unbequem sein. Zum Beispiel:

  • Überwältigende Menge an Ausgabedaten und Fehler-/Diagnosemeldungen
  • Versehentliche Schließung des Terminals, die zur Beendigung potenziell geschäftskritischer Prozesse usw. führt.

Um diese Probleme anzugehen, gibt es mehrere Möglichkeiten:

  • Ausführen der Prozesse im Hintergrund
  • Trennen der Prozesse vom Terminal

Die im Hintergrund laufenden Prozesse überfordern die Terminalausgabe nicht. Darüber hinaus steht es dem Terminal frei, die zusätzlichen Befehle auszuführen. Getrennte Prozesse werden nicht beendet, selbst wenn das Terminal geschlossen ist.

Starten der Prozesse im Hintergrund

In vielen Fällen kann die Ausführung eines Befehls eine ganze Weile dauern. Im Allgemeinen muss der Benutzer warten, bis der Befehl abgeschlossen ist. Wenn Sie beispielsweise einen Texteditor verwenden, ist die Shell erst verfügbar, wenn der Editor geschlossen wird.

Zur Veranschaulichung verwenden wir den Befehl „yes“:

$ Mann, ja

Methode 1:

Es gibt mehrere Möglichkeiten, den laufenden Prozess in den Hintergrund zu schicken.

Zuerst stoppen wir den Prozess, ohne ihn zu beenden. Führen Sie dazu den folgenden Befehl aus und drücken Sie „Strg + Z“:

$ ja „Hallo Welt“ > /dev/null

Führen Sie nun den Befehl „bg“ aus, um den Prozess im Hintergrund zu senden:

$ bg

Sobald es in den Hintergrund tritt, wird der Prozess fortgesetzt. Der folgende Befehl listet alle laufenden Jobs im Hintergrund auf:

$ Jobs

Methode 2:

Bei der vorherigen Methode wurde der Prozess zunächst im Vordergrund ausgeführt. Wir haben den Vorgang angehalten, ihn in den Hintergrund geschickt und ihn dann wieder aufgenommen. Stattdessen können wir den Prozess direkt im Hintergrund ausführen.

Fügen Sie dazu das „&“-Zeichen am Ende des Befehls hinzu:

$ ja „oh long johnson“ > /dev/null &

Dabei laufen die erzeugten Prozesse automatisch im Hintergrund ab. Überprüfen Sie zur Überprüfung die Liste der Hintergrundjobs:

$ Jobs

Methode 3:

Mithilfe von können wir die Prozesse auch im Hintergrund starten tmux, ein leistungsstarker Multiplexer, der mehrere Terminalsitzungen in einem einzigen Fenster verwalten kann. Unter Linux ist es nicht vorinstalliert. Es ist jedoch für alle großen Linux-Distributionen verfügbar. Lerne mehr über tmux-Installation unter Linux.

Im folgenden Beispiel verwenden wir tmux, um ein Ziel anzupingen und die Ausgabe zu protokollieren:

$ tmux new -d ‚ping -c 9 127.0.0.1 > ping.log‘

Die Protokolldatei überprüft, ob der Befehl erfolgreich ausgeführt wird oder nicht:

$ cat ping.log

Es ist nur ein Beispiel dafür, was tmux leisten kann. Erfahren Sie anhand von Beispielen mehr über tmux.

Die Jobs wieder in den Vordergrund rücken

Wenn Sie einen Job wieder in den Vordergrund holen möchten, verwenden wir den Befehl „fg“. Außerdem benötigen wir die Jobnummer aus dem Jobs-Befehl.

Bestimmen Sie zunächst den Job, den Sie in den Vordergrund rücken möchten:

$ Jobs

Verwenden Sie nun den Befehl „fg“:

$ fg %

Trennen der Prozesse vom Terminal

Jeder mit einem Terminal verknüpfte Prozess wird beendet, sobald das Terminal geschlossen wird, unabhängig davon, ob es im Vordergrund oder im Hintergrund ausgeführt wird. Um die Beendigung des Prozesses zu vermeiden, trennen wir den Zielprozess vom Terminal/der Shell.

Methode 1:

Um einen Prozess abzulehnen, benötigen wir zunächst einen Hintergrundprozess:

$ ja „qwerty“ > /dev/null &

Sehen Sie sich die Liste der laufenden Hintergrundjobs an:

$ Arbeitsplätze

Notieren Sie sich die Seriennummer des Ziel-Hintergrundjobs. Verwenden Sie nun den Befehl „disown“, um es vom Terminal zu trennen:

$ % verleugnen

Der Zieljob sollte nun aus der Jobliste verschwinden:

$ Jobs

Sie können jedoch weiterhin sehen, wie der Prozess im Hintergrund läuft:

$ ps aux

Methode 2:

Eine andere Möglichkeit, einen Prozess vom übergeordneten Terminal zu trennen, ist die Verwendung des Befehls „nohup“. Dadurch läuft ein Prozess auch nach dem Schließen des Terminals im Hintergrund weiter.

Die Verwendung von „nohup“ ist wie folgt:

$ nohup &

Überprüfen Sie, ob der Job erfolgreich erstellt wurde:

$ Jobs

Methode 3:

Diese Methode trennt den Zielprozess vollständig. Dies ist eine effektivere Möglichkeit, die GUI-Apps zu trennen.

Um beispielsweise den Firefox zu starten und vollständig vom Terminal zu trennen, verwenden Sie den folgenden Befehl:

$ firefox /dev/null &

Hier:

  • Der /dev/null ist ein spezielles Gerät unter Linux, das alle darauf geschriebenen Daten löscht.
  • Im vorherigen Befehl wird die Eingabe gelesen und die Ausgabe an gesendet /dev/null. Erfahren Sie mehr über die anderen Verwendungsmöglichkeiten von /dev/null.

Abschluss

Wir haben die verschiedenen Möglichkeiten demonstriert, einen Prozess im Hintergrund auszuführen. Wir haben auch Möglichkeiten gezeigt, einen Prozess vom übergeordneten Terminal zu trennen. Diese Techniken können nützlich sein, wenn Sie mit dem Terminal arbeiten oder ein Skript ausführen.

Wenn Sie bestimmte Befehle in einem bestimmten Muster ausführen müssen, können wir sie als systemd-Dienst auslagern. Für Remote-Maschinen können wir auch Tools von Drittanbietern wie Ansible verwenden, um fast alles zu automatisieren.

Viel Spaß beim Rechnen!

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen