Der Befehl nohup
führt ein anderes als Argument spezifiziertes Programm aus und ignoriert alle SIGHUP
(hangup) Signale. SIGHUP
ist ein Signal, das an einen Prozess gesendet wird, wenn sein Steuerterminal geschlossen ist.
Normalerweise wird die Sitzung beendet, wenn Sie ein Programm über SSH ausführen, wenn Ihre Verbindung unterbrochen wird oder Sie sich abmelden, und alle vom Terminal ausgeführten Prozesse werden gestoppt. Hier ist der Befehl nohup
nützlich., Es ignoriert alle Hangup-Signale und der Prozess wird weiter ausgeführt.
So verwenden Sie den Befehl nohup #
Die Syntax für den Befehl nohup
lautet wie folgt:
nohup COMMAND
Der Befehl akzeptiert keine anderen Optionen außer dem Standard --help
und --version
.,
Schauen wir uns folgendes Beispiel an:
nohup mycommand
nohup: ignoring input and appending output to 'nohup.out'
nohup
führt den Befehl mycommand
im Vordergrund aus und leitet die Befehlsausgabe in die Datei nohup.out
um. Diese Datei wird im aktuellen Arbeitsverzeichnis erstellt . Wenn der Benutzer, der den Befehl ausführt, keine Schreibberechtigungen für das Arbeitsverzeichnis hat, wird die Datei im Stammverzeichnis des Benutzers erstellt.
Wenn Sie das Terminal abmelden oder schließen, wird der Vorgang nicht beendet.,
Das Ausführen des Befehls im Hintergrund #
Mit nohup
im Vordergrund ist nicht sehr nützlich, da Sie erst nach Abschluss des Befehls mit der Shell interagieren können.
Um den Befehl im Hintergrund auszuführen , hängen Sie am Ende des Befehls das Symbol &
an:
nohup mycommand &
Die Ausgabe enthält die Shell-Job-ID (in Klammern) und die Prozess-ID:
25177
Sie können die Job-ID verwenden, um den Befehl mit der fg
Befehl.,
Wenn Sie den Prozess aus irgendeinem Grund beenden möchten, verwenden Sie den Befehl gefolgt von der Prozess-ID:
kill -9 25132
Umleitung der Ausgabe in eine Datei #
Standardmäßig leitet nohup
die Befehlsausgabe an die nohup.out
datei. Wenn Sie die Ausgabe in eine andere Datei umleiten möchten, verwenden Sie die Standard-Shell-Umleitung.,
Um beispielsweise die Standardausgabe und den Standardfehler auf die mycommand.out
umzuleiten, würden Sie Folgendes verwenden:
nohup mycommand > mycommand.out 2>&1 &
Um die Standardausgabe und den Standardfehler auf verschiedene Dateien umzuleiten:
nohup mycommand > mycommand.out 2> mycommand.err &
Alternativen #
Es gibt mehrere alternative Programme, mit denen Sie vermeiden können, dass ein Befehl beendet wird wenn Sie das Terminal schließen oder die Verbindung trennen.,
Screen #
Screen oder GNU Screen ist ein Terminalmultiplexer-Programm, mit dem Sie eine Bildschirmsitzung starten und eine beliebige Anzahl von Fenstern (virtuelle Terminals) in dieser Sitzung öffnen können. Prozesse, die auf dem Bildschirm ausgeführt werden, werden weiterhin ausgeführt, wenn ihr Fenster nicht sichtbar ist, auch wenn Sie die Verbindung trennen.
Tmux #
Tmux ist eine moderne alternative zu den GNU-Bildschirm. Mit Tmux können Sie auch eine Sitzung erstellen und mehrere Fenster in dieser Sitzung öffnen. Tmux-Sitzungen sind persistent, was bedeutet, dass Programme, die in Tmux ausgeführt werden, auch dann ausgeführt werden, wenn Sie das Terminal schließen.,
Disown #
disown
ist ein Shell-Builtin, das einen Shell-Job aus dem Job-Steuerelement der Shell entfernt. Im Gegensatz zu nohup
können Sie disown
auch bei laufenden Prozessen verwenden.
Schlussfolgerung #
nohup
können Sie verhindern, dass Befehle beendet werden, wenn Sie sich abmelden oder das Terminal verlassen.