nohup-Befehl: Verwendung, nohup.out und Weiterlaufen nach dem Schließen des Terminals
Damit ein Job weiterläuft, auch wenn du das Terminal schließt oder die SSH-Verbindung abbricht, startest du ihn mit dem nohup-Befehl. nohup führt den Befehl so aus, dass er das Hangup-Signal (SIGHUP) ignoriert, das beim Schließen eines Terminals ankommt. Als auf einem AlmaLinux-9-Server ein sleep mit nohup und ein sleep ohne nohup zusammen gestartet und das Terminal geschlossen wurde, lief nur der mit nohup gestartete weiter.
Die Ausgaben unten stammen von einem AlmaLinux-9.8-Server (root-Konto) und einem Debian-12-Server (normales Konto). Statt eines lange laufenden Jobs wurde sleep gestartet, und zum Beenden wurde nur die beim Start erhaltene PID angegeben. Die Zeiten sind in UTC ausgegeben.
1️⃣ So verwendest du den nohup-Befehl
nohup steht vor dem auszuführenden Befehl, und das & am Ende des Befehls legt die Ausführung im Hintergrund fest. Laut dem offiziellen GNU-Handbuch schickt nohup den Befehl selbst nicht in den Hintergrund – ohne das & kommt die Eingabeaufforderung also erst zurück, wenn der Befehl fertig ist.
nohup sleep 300 &[1] 3431609
nohup: ignoring input and appending output to 'nohup.out'[1] ist die Jobnummer, 3431609 die PID des gestarteten Prozesses. Die folgende Meldung besagt, dass keine Tastatureingabe gelesen und die Ausgabe an die Datei nohup.out angehängt wird.
Die PID des gerade gestarteten Jobs steht in $!. Prüfst du sie direkt nach dem Start mit [echo $!] und notierst sie, kannst du genau diese Nummer verwenden, wenn du den Status ansiehst oder den Job beendest.
echo $!3431609Wird ein Terminal geschlossen, erhält die Shell das Hangup-Signal und schickt dasselbe Signal an die Jobs, die sie gestartet hat (laut offiziellem Bash-Handbuch). Um das zu prüfen, wurden in einem neuen Terminal [nohup sleep 300 &] und ohne nohup [sleep 301 &] zusammen gestartet.
sleep 301 &[2] 3432892jobs -l[1]- 3432883 Running nohup sleep 300 &
[2]+ 3432892 Running sleep 301 &Während beide Jobs auf Running standen, wurde das Terminalfenster geschlossen und die beiden PIDs von einer anderen Shell aus mit ps geprüft.
ps -p 3432883,3432892 -o pid,stat,etime,cmd PID STAT ELAPSED CMD
3432883 S 00:05 sleep 300Nur das mit nohup gestartete sleep 300 blieb übrig; das ohne nohup gestartete sleep 301 endete beim Schließen des Terminals.
Ein mit nohup gestarteter Prozess ist wie ein Handy im Nicht-stören-Modus.
nohup ist ein Befehl aus dem Paket coreutils. Die installierte Version siehst du in der ersten Zeile von --version. Der AlmaLinux-9.8-Server hatte 8.32, der Debian-12-Server 9.1.
nohup --version | head -1nohup (GNU coreutils) 8.32nohup --version | head -1nohup (GNU coreutils) 9.12️⃣ nohup.out und Umleitung der Ausgabe
Wenn du nicht festlegst, wohin die Ausgabe geht, hängt nohup die Ausgabe des Befehls an nohup.out im aktuellen Ordner an. Die neu angelegte nohup.out war 0 Byte groß und hatte die Rechte -rw-------, also Lesen und Schreiben nur für den Benutzer, der sie angelegt hat.
ls -l nohup.out-rw------- 1 root root 0 Oct 28 23:04 nohup.outLaut offiziellem GNU-Handbuch legt nohup die Datei nohup.out unabhängig von der umask-Einstellung so an, dass nur der anlegende Benutzer sie lesen und schreiben kann. Kann nohup nicht in den aktuellen Ordner schreiben, schreibt es in $HOME/nohup.out im Home-Ordner, und geht auch das nicht, führt es den Befehl nicht aus.
Als ein Befehl mit Ausgabe über nohup lief, blieb die Ausgabe nach dem Ende des Befehls in nohup.out.
nohup sh -c 'echo start; sleep 2; echo end' &[1] 3431985
nohup: ignoring input and appending output to 'nohup.out'cat nohup.outstart
end
[1]+ Done nohup sh -c 'echo start; sleep 2; echo end'Das Done in der letzten Zeile ist die Meldung der Shell, dass der Job fertig ist. nohup.out wird nicht bei jedem Lauf neu angelegt, sondern am Ende derselben Datei fortgeschrieben – startest du mehrere Jobs aus demselben Ordner, mischt sich ihre Ausgabe in einer Datei.
Um für jeden Job ein eigenes Log zu führen, legst du die Ausgabedatei mit > fest und schickst mit 2>&1 auch die Fehlerausgabe in dieselbe Datei.
nohup sh -c 'echo start; sleep 300' > job.log 2>&1 &[1] 3432059cat job.lognohup: ignoring input
startMit 2>&1 zeigte das Terminal nur Jobnummer und PID, und der Hinweis von nohup [nohup: ignoring input] landete in der ersten Zeile der Logdatei.
Hängst du nur > an und lässt 2>&1 weg, erscheint im Terminal ein Hinweis, dass die Fehlerausgabe in die Datei der Standardausgabe umgeleitet wird.
nohup sleep 300 > job2.log &[2] 3432097
nohup: ignoring input and redirecting stderr to stdoutDie Ausgabe von Jobs, die du nicht aufheben musst, schickst du nach /dev/null. Auch hier zeigte das Terminal nur Jobnummer und PID.
nohup sleep 300 > /dev/null 2>&1 &[3] 3432137Die Tabelle unten zeigt für die vier Aufrufformen, wohin die Ausgabe ging und welche Meldung im Terminal erschien.
| Aufrufform | Wohin die Ausgabe geht | Meldung im Terminal |
|---|---|---|
| nohup Befehl & | nohup.out im aktuellen Ordner | nohup: ignoring input and appending output to 'nohup.out' |
| nohup Befehl > Datei & | Angegebene Datei (mit Fehlerausgabe) | nohup: ignoring input and redirecting stderr to stdout |
| nohup Befehl > Datei 2>&1 & | Angegebene Datei | Keine (Hinweis in der ersten Zeile der Datei) |
| nohup Befehl > /dev/null 2>&1 & | Verworfen | Nein |
3️⃣ nohup-Prozesse prüfen und beenden
Die jobs-Liste zeigt nur Jobs, die in der aktuellen Shell gestartet wurden. Nachdem du das Terminal geschlossen und dich neu verbunden hast, prüfst du einen nohup-Prozess deshalb mit ps -p und seiner PID. Solange du in derselben Shell bist, zeigt jobs -l Jobnummer, PID und Status zusammen.
jobs -l[1]+ 3431609 Running nohup sleep 300 &Schreibst du eine PID hinter ps -p und wählst mit -o die Spalten, erscheint nur die Zeile dieses Prozesses. S in STAT bedeutet, dass er schläft und auf ein Ereignis wartet; ELAPSED ist die Zeit seit dem Start.
ps -p 3431609 -o pid,stat,etime,cmd PID STAT ELAPSED CMD
3431609 S 00:03 sleep 300Zum Beenden verwendest du kill mit der PID dahinter.
kill 3431609kill gab nichts aus, und beim anschließenden jobs erschien der Job als Terminated und verschwand dann aus der Liste.
jobs[1]+ Terminated nohup sleep 300Ein erneutes ps mit derselben PID zeigte nur die Kopfzeile – der Prozess war also beendet.
ps -p 3431609 -o pid,stat,etime,cmd PID STAT ELAPSED CMDnohup ignoriert nur das Hangup-Signal, daher endet der Prozess auch dann nicht, wenn du dasselbe Signal direkt mit [kill -HUP] schickst. kill -HUP ging an das mit nohup gestartete sleep 305 und an das ohne nohup gestartete sleep 306.
kill -HUP 3437119 3437128Die anschließende Prüfung mit jobs -l zeigte nur den nohup-Job noch als Running, sleep 306 endete mit Hangup.
jobs -l[1]- 3437119 Running nohup sleep 305 &
[2]+ 3437128 Hangup sleep 306Gibst du kill kein Signal an, schickt es SIGTERM – auch ein mit nohup gestarteter Job endet also mit [kill PID].
4️⃣ nohup-Befehl und disown im Vergleich, Optionen
🔲 nohup und disown im Vergleich
disown ist ein bash-Builtin für bereits laufende Jobs: Damit löst du einen ohne nohup mit & gestarteten Job nachträglich vom Hangup-Signal des Terminals. disown leitet die Ausgabe nicht nach nohup.out um – bei Jobs mit Ausgabe legst du deshalb schon beim Start mit > Datei fest, wohin sie geht.
Laut offiziellem Bash-Handbuch nimmt disown ohne Optionen den Job aus der jobs-Liste, während disown -h ihn in der Liste lässt und nur verhindert, dass das Hangup-Signal ihn erreicht. Zuerst wurde sleep 302 gestartet und danach disown ausgeführt.
sleep 302 &[1] 3433230disowndisown gab nichts aus, und auch das direkt danach ausgeführte jobs -l lieferte ein leeres Ergebnis.
jobs -lAls Nächstes wurde sleep 303 gestartet und disown -h auf die Jobnummer %1 angewendet.
sleep 303 &[1] 3433343disown -h %1Die Prüfung mit jobs -l zeigte den Job weiterhin in der Liste.
jobs -l[1]+ 3433343 Running sleep 303 &Dazu wurde noch ein sleep 304 ganz ohne Behandlung gestartet, das Terminal geschlossen und die drei PIDs von einer anderen Shell aus geprüft.
sleep 304 &[2] 3433474ps -p 3433230,3433343,3433474 -o pid,stat,etime,cmd PID STAT ELAPSED CMD
3433230 S 00:11 sleep 302
3433343 S 00:08 sleep 303Die beiden Jobs mit disown und disown -h blieben übrig, nur das unbehandelte sleep 304 endete. Die vier Methoden im Vergleich:
| Methode | Wann | jobs-Liste | Nach dem Schließen des Terminals | Ausgabe |
|---|---|---|---|---|
| nohup Befehl & | Beim Start | Bleibt | Bleibt | nohup.out oder angegebene Datei |
| Befehl & dann disown | Nach dem Start | Entfällt | Bleibt | Unverändert |
| Befehl & dann disown -h | Nach dem Start | Bleibt | Bleibt | Unverändert |
| Nur Befehl & | — | Bleibt | Beendet | Unverändert |
Für Arbeit, bei der du die Sitzung wieder aufrufen und weiter tippen musst, passt ein Terminal-Multiplexer wie tmux; für Arbeit, die du einmal startest und deren Ergebnis du nur aus einer Datei holst, reicht nohup.
🔲 Optionen des nohup-Befehls
📌 Wichtige Optionen: Ergebnisse aus diesem Artikel
| Option | Was es tut | Ergebnis in diesem Artikel | |
|---|---|---|---|
| --version | Gibt Versionsinformationen aus und beendet sich | AlmaLinux-9.8-Server: nohup (GNU coreutils) 8.32, Debian-12-Server: nohup (GNU coreutils) 9.1 |
📎 Weitere Optionen: laut offiziellem Handbuch
| Option | Was es tut | |
|---|---|---|
| --help | Gibt die Hilfe aus und beendet sich |
🔲 nohup-Befehl-Simulator
Im Simulator unten startest du einen Job mit nohup, schließt das Terminal mit dem 🔌-Chip, verbindest dich neu und siehst selbst, welche Prozesse übrig bleiben.
🔢 FAQ & empfohlene Inhalte
Zeitplanung
Linux: crontab einrichten
Einrichtung von crontab, dem Linux-Planer, der Jobs wie Backups oder Log-Bereinigung zu festen Zeiten wiederholt.
Prozesse
Linux-Befehl top (CPU- und Speicherauslastung prüfen)
Der top-Befehl zeigt die CPU- und Speichernutzung je Prozess in Echtzeit.
ℹ️ Affiliate-Hinweis
Die Inhalte dieser Website enthalten Affiliate-Links. Kauft ein Besucher über einen dieser Links ein Produkt oder eine Dienstleistung, erhält die Website vom Verkäufer eine Provision. Der Betrag, den der Käufer zahlt(bei Aktionsrabatten sinkt er ↓), steigt dadurch nicht. Angegebene Preise, Rabatte und Lagerbestände entsprechen dem Stand bei Erstellung und können abweichen; prüfe sie daher vor dem Kauf beim Verkäufer. Produkte werden nach eigenen Kriterien ausgewählt und bewertet, und Provisionen beeinflussen weder die Reihenfolge noch den Inhalt der Bewertungen.