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 Nichts
  • 2>&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:

  1. Halte den Prozess mit Strg+Z an
  2. Verschiebe ihn mit bg in 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

MethodeAnwendungsfall
befehl &Befehl im Hintergrund starten
disownLaufenden Job von der Shell loesen
nohupBefehl starten, der SIGHUP ignoriert
tmux / screenPersistente 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.