
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:
- Beenden Sie den Vorgang, indem Sie
Ctrl+Z
eingeben . - 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.