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

So führen Sie Linux-Befehle im Hintergrund aus

Wenn Sie einen Befehl im Terminal ausführen, müssen Sie normalerweise warten, bis der Befehl beendet ist, bevor Sie einen weiteren eingeben können. Dies wird als Ausführen des Befehls im Vordergrund oder Vordergrundprozess bezeichnet. Wenn ein Prozess im Vordergrund läuft, belegt er Ihre Shell und Sie können mit ihm über die Eingabegeräte interagieren.

Was ist, wenn die Ausführung des Befehls lange dauert und Sie in der Zwischenzeit andere Befehle ausführen möchten? Ihnen stehen mehrere Optionen zur Verfügung. Die naheliegendste und einfachste Option besteht darin, eine neue Shell-Sitzung zu starten und den Befehl darin auszuführen. Eine andere Möglichkeit besteht darin, den Befehl im Hintergrund auszuführen.

Ein Hintergrundprozess ist ein Prozess/Befehl, der von einem Terminal aus gestartet wird und ohne Interaktion des Benutzers im Hintergrund ausgeführt wird.

In diesem Artikel werden wir über die Hintergrundprozesse von Linux sprechen. Wir zeigen Ihnen, wie Sie einen Befehl im Hintergrund starten und den Prozess nach dem Schließen der Shell-Sitzung am Laufen halten.

Linux-Befehl im Hintergrund ausführen #

Um einen Befehl im Hintergrund auszuführen, fügen Sie das kaufmännische Und-Symbol hinzu (& ) am Ende des Befehls:

command &

Die Shell-Job-ID (in Klammern eingeschlossen) und die Prozess-ID werden auf dem Terminal ausgegeben:

[1] 25177

Sie können mehrere Prozesse gleichzeitig im Hintergrund ausführen.

Der Hintergrundprozess schreibt weiterhin Nachrichten an das Terminal, von dem aus Sie den Befehl aufgerufen haben. Um die stdout zu unterdrücken und stderr Nachrichten verwenden die folgende Syntax:

command > /dev/null 2>&1 & 

>/dev/null 2>&1 bedeutet stdout umleiten nach /dev/null und stderr zu stdout .

Verwenden Sie die jobs Dienstprogramm zum Anzeigen des Status aller angehaltenen und Hintergrundjobs in der aktuellen Shell-Sitzung:

jobs -l

Die Ausgabe enthält die Jobnummer, die Prozess-ID, den Jobstatus und den Befehl, der den Job gestartet hat:

[1]+ 25177 Running                 ping google.com &

Um einen Hintergrundprozess in den Vordergrund zu bringen, verwenden Sie den fg Befehl:

fg

Wenn Sie mehrere Hintergrundjobs haben, fügen Sie % hinzu und die Job-ID nach dem Befehl:

fg %1

Um den Hintergrundprozess zu beenden, verwenden Sie kill Befehl gefolgt von der Prozess-ID:

kill -9 25177

Einen Vordergrundprozess in den Hintergrund verschieben #

So verschieben Sie einen laufenden Vordergrundprozess in den Hintergrund:

  1. Beenden Sie den Vorgang, indem Sie Ctrl+Z eingeben .
  2. Verschieben Sie den angehaltenen Prozess in den Hintergrund, indem Sie bg eingeben .

Lassen Sie Hintergrundprozesse laufen, nachdem eine Shell beendet wurde #

Wenn Ihre Verbindung unterbrochen wird oder Sie sich von der Shell-Sitzung abmelden, werden die Hintergrundprozesse beendet. Es gibt mehrere Möglichkeiten, den Prozess nach dem Ende der interaktiven Shell-Sitzung am Laufen zu halten.

Eine Möglichkeit besteht darin, den Job mit disown aus der Jobsteuerung der Shell zu entfernen Shell eingebaut:

disown

Wenn Sie mehr als einen Hintergrundjob haben, fügen Sie % hinzu und die Job-ID nach dem Befehl:

disown %1

Bestätigen Sie mit jobs -l, dass der Job aus der Tabelle der aktiven Jobs entfernt wurde Befehl. Um alle laufenden Prozesse aufzulisten, einschließlich der verworfenen, verwenden Sie den ps aux Befehl.

Eine andere Möglichkeit, einen Prozess nach dem Verlassen der Shell am Laufen zu halten, ist die Verwendung von nohup .

Das nohup Befehl führt ein anderes als Argument angegebenes Programm aus und ignoriert alle SIGHUP (Auflege-)Signale. SIGHUP ist ein Signal, das an einen Prozess gesendet wird, wenn sein steuerndes Terminal geschlossen wird.

Um einen Befehl im Hintergrund mit nohup auszuführen Geben Sie Folgendes ein:

nohup command &

Die Befehlsausgabe wird an nohup.out umgeleitet Datei.

nohup: ignoring input and appending output to 'nohup.out'

Wenn Sie sich abmelden oder das Terminal schließen, wird der Vorgang nicht beendet.

Alternativen #

Es gibt eine Reihe von Programmen, mit denen Sie mehrere interaktive Sitzungen gleichzeitig durchführen können.

Bildschirmnummer

Screenor GNU Screen ist ein Terminal-Multiplexer-Programm, mit dem Sie eine Bildschirmsitzung starten und eine beliebige Anzahl von Fenstern (virtuellen Terminals) innerhalb dieser Sitzung öffnen können. Prozesse, die in Screen ausgeführt werden, werden weiterhin ausgeführt, wenn ihr Fenster nicht sichtbar ist, selbst wenn Sie die Verbindung trennen.

Tmux-Nummer

Tmux ist eine moderne Alternative zu GNU screen. Mit Tmux können Sie auch eine Sitzung erstellen und mehrere Fenster innerhalb dieser Sitzung öffnen. Tmux-Sitzungen sind dauerhaft, was bedeutet, dass Programme, die in Tmux ausgeführt werden, auch dann weiter ausgeführt werden, wenn Sie das Terminal schließen.

Schlussfolgerung #

Um einen Befehl im Hintergrund auszuführen, fügen Sie & ein am Ende des Befehls.

Wenn Sie einen Befehl im Hintergrund ausführen, müssen Sie nicht warten, bis er beendet ist, bevor Sie einen anderen ausführen können.

Wenn Sie Fragen oder Feedback haben, können Sie gerne einen Kommentar hinterlassen.


Linux
  1. Ausführen von Linux-Befehlen im Hintergrund und Vordergrund

  2. A bis Z Linux-Befehle

  3. So beschränken Sie Benutzerbefehle in Linux

  4. Wie führe ich ein Skript im Hintergrund aus (Linux OpenWRT)?

  5. Linux:Wie man einen Befehl in einem bestimmten Verzeichnis ausführt

So können Sie vergessene Linux-Befehle einfach abrufen

So korrigieren Sie einfach falsch geschriebene Bash-Befehle in Linux

So überprüfen Sie den Verlauf der Linux-Befehle nach Datum

So führen Sie einen Befehl regelmäßig unter Linux mit Watch aus

So führen Sie mehrere Linux-Befehle in einem einzigen Befehl aus

So führen Sie mehrere Linux-Befehle gleichzeitig im Linux-Terminal aus