Hintergrundprozesse geben dir die Kontrolle ueber dein Terminal zurueck, waehrend ein Befehl weiterlaeuft. Du kannst sofort weiterarbeiten, ohne auf das Ende langer Operationen warten zu muessen.
Einen Befehl im Hintergrund starten
Haenge das &-Zeichen an einen Befehl an, um ihn im Hintergrund zu starten:
rsync -a /home /backup &
Die Shell zeigt die Jobnummer und Prozess-ID an:
[1] 25177
Damit bleibt das Terminal frei fuer weitere Eingaben.
Ausgaben unterdruecken
Hintergrundprozesse schreiben ihre Ausgaben weiterhin ins Terminal. Um das zu unterbinden, leite stdout und stderr nach /dev/null um:
rsync -a /home /backup >/dev/null 2>&1 &
>/dev/null- Leitet die Standardausgabe ins Nichts2>&1- Leitet Fehlermeldungen dorthin, wo stdout hingeht
Hintergrundjobs verwalten
Mit dem Befehl jobs siehst du alle Hintergrundjobs der aktuellen Shell:
jobs -l
Ausgabe:
[1]+ 25177 Running rsync -a /home /backup &
Die Ausgabe zeigt Jobnummer, PID, Status und den Befehl.
Job in den Vordergrund holen
Mit fg holst du den zuletzt gestarteten Hintergrundjob in den Vordergrund:
fg
Bei mehreren Jobs gibst du die Jobnummer an:
fg %1
Hintergrundprozess beenden
Beende einen Hintergrundprozess mit kill und der Prozess-ID:
kill 25177
Falls der Prozess nicht reagiert, erzwinge das Beenden mit Signal 9:
kill -9 25177
Laufenden Prozess in den Hintergrund verschieben
Du kannst auch einen bereits laufenden Vordergrundprozess in den Hintergrund verschieben:
- Halte den Prozess mit
Strg+Zan - Verschiebe ihn mit
bgin den Hintergrund
bg
Der Prozess laeuft jetzt im Hintergrund weiter.
Prozesse nach dem Logout am Laufen halten
Wenn du die Shell schliesst, erhalten alle Hintergrundprozesse das SIGHUP-Signal und werden beendet. Es gibt zwei Methoden, das zu verhindern.
Methode 1: disown
Mit disown entfernst du einen Job aus der Jobkontrolle der Shell. Er wird nicht mehr beendet, wenn du die Shell schliesst:
rsync -a /home /backup &
disown
Bei mehreren Jobs gibst du die Jobnummer an:
disown %1
Der Prozess laeuft weiter, taucht aber nicht mehr in jobs -l auf. Mit ps aux | grep rsync findest du ihn trotzdem.
Methode 2: nohup
Der Befehl nohup startet einen Prozess, der SIGHUP-Signale ignoriert:
nohup rsync -a /home /backup &
Die Ausgabe wird automatisch in die Datei nohup.out umgeleitet:
nohup: ignoring input and appending output to 'nohup.out'
Du kannst dich abmelden oder das Terminal schliessen - der Prozess laeuft weiter.
Um die Ausgabe in eine andere Datei zu schreiben:
nohup rsync -a /home /backup > backup.log 2>&1 &
Terminal-Multiplexer als Alternative
Fuer komplexere Szenarien eignen sich Terminal-Multiplexer besser als einfache Hintergrundprozesse.
tmux
Mit tmux erstellst du persistente Sitzungen, die unabhaengig von deiner SSH-Verbindung weiterlaufen:
tmux new -s backup
rsync -a /home /backup
Trenne die Sitzung mit Strg+B, dann D. Verbinde dich spaeter wieder:
tmux attach -t backup
screen
GNU Screen funktioniert aehnlich:
screen -S backup
rsync -a /home /backup
Trenne mit Strg+A, dann D. Verbinde dich mit:
screen -r backup
Beide Programme halten Prozesse auch bei Verbindungsabbruechen am Laufen und bieten zusaetzlich mehrere Fenster in einer Sitzung.
Zusammenfassung
| Methode | Anwendungsfall |
|---|---|
befehl & | Befehl im Hintergrund starten |
disown | Laufenden Job von der Shell loesen |
nohup | Befehl starten, der SIGHUP ignoriert |
tmux / screen | Persistente Sitzungen fuer langlebige Prozesse |
Fuer einfache Aufgaben reicht das &-Zeichen mit nohup. Bei laenger laufenden Prozessen oder Remote-Verbindungen bieten tmux oder screen mehr Kontrolle und Sicherheit.