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.
Wenn Sie ein Programm über SSH ausführen, wird die Sitzung normalerweise beendet, wenn Ihre Verbindung unterbrochen wird oder Sie sich abmelden, und alle vom Terminal ausgeführten Prozesse werden angehalten. Hier ist der nohup
Befehl ist praktisch. Es ignoriert alle Hangup-Signale und der Prozess wird weiter ausgeführt.
Verwendung des nohup-Befehls #
Die Syntax für nohup
Befehl lautet wie folgt:
nohup COMMAND [ARGS]
Der Befehl akzeptiert keine anderen Optionen außer dem Standard --help
und --version
.
Schauen wir uns das folgende Beispiel an:
nohup mycommand
nohup: ignoring input and appending output to 'nohup.out'
nohup
führt den mycommand
aus Befehl in den Vordergrund und leitet die Befehlsausgabe auf nohup.out
um Datei. Diese Datei wird im aktuellen Arbeitsverzeichnis erstellt. Wenn der Benutzer, der den Befehl ausführt, keine Schreibberechtigung für das Arbeitsverzeichnis hat, wird die Datei im Home-Verzeichnis des Benutzers erstellt.
Wenn Sie sich abmelden oder das Terminal schließen, wird der Vorgang nicht beendet.
Befehl im Hintergrund ausführen #
Mit nohup
im Vordergrund ist nicht sehr nützlich, da Sie nicht mit der Shell interagieren können, bis der Befehl abgeschlossen ist.
Um den Befehl im Hintergrund auszuführen, hängen Sie &
an Symbol am Ende des Befehls:
nohup mycommand &
Die Ausgabe enthält die Shell-Job-ID (in Klammern eingeschlossen) und die Prozess-ID:
[1] 25177
Über die Job-ID können Sie den Befehl mit fg
in den Vordergrund holen Befehl.
Wenn Sie den Prozess aus irgendeinem Grund beenden möchten, verwenden Sie den kill
Befehl, gefolgt von der Prozess-ID:
kill -9 25132
Umleitung der Ausgabe in eine Datei #
Standardmäßig nohup
leitet die Befehlsausgabe auf nohup.out
um Datei. Wenn Sie die Ausgabe in eine andere Datei umleiten möchten, verwenden Sie die Standard-Shell-Umleitung.
Zum Beispiel, um die Standardausgabe und den Standardfehler auf mycommand.out
umzuleiten Sie würden verwenden:
nohup mycommand > mycommand.out 2>&1 &
So leiten Sie die Standardausgabe und den Standardfehler in verschiedene Dateien um:
nohup mycommand > mycommand.out 2> mycommand.err &
Alternativen #
Es gibt mehrere alternative Programme, die Sie verwenden können, um zu verhindern, dass ein Befehl beendet wird, wenn Sie das Terminal schließen oder die Verbindung trennen.
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 zum GNU-Bildschirm. 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.
Disown #
disown
ist ein Shell-Builtin, das einen Shell-Job aus der Job-Steuerung der Shell entfernt. Im Gegensatz zu nohup
, können Sie disown
verwenden auch auf laufenden Prozessen.
Schlussfolgerung #
nohup
können Sie verhindern, dass Befehle beendet werden, wenn Sie sich abmelden oder das Terminal verlassen.
Wenn Sie Fragen oder Feedback haben, können Sie gerne einen Kommentar hinterlassen.