Job Control ist die Fähigkeit der Bash, Vordergrund- und Hintergrundprozesse zu verwalten. Die jobs-Befehle zeigen laufende oder pausierte Aufgaben an und verschieben sie zwischen Vorder- und Hintergrund.

Prozesse in den Hintergrund schicken

Ein Programm kann direkt im Hintergrund starten, wenn man ein Kaufmanns-Und (&) anhängt. Alternativ pausiert man einen laufenden Vordergrundprozess mit Strg+Z und verschiebt ihn danach:

sleep 300 &          # startet sleep direkt im Hintergrund
top                 # läuft im Vordergrund
# Strg+Z drücken: Prozess wird gestoppt (Status: Stopped)
bg                  # setzt den gestoppten Job im Hintergrund fort
fg                  # holt einen Job zurück in den Vordergrund

Die wichtigsten jobs-Befehle

  • jobs — listet alle Jobs mit Job-Nummer, Status und Kommando
  • jobs -l — zeigt zusätzlich die Prozess-ID (PID)
  • bg %n — setzt Job Nummer n im Hintergrund fort
  • fg %n — holt Job Nummer n in den Vordergrund
  • kill %n — beendet Job Nummer n (Job-Referenz statt PID)
  • wait — wartet, bis alle Hintergrundjobs fertig sind
  • disown %n — entfernt den Job aus der Job-Tabelle, sodass er das Terminal nicht mehr blockiert
  • nohup — startet ein Programm unempfindlich gegen HUP-Signale, ideal für SSH-Sessions

Job-Nummern richtig lesen

$ sleep 100 &
[1] 2345
$ jobs
[1]+  Running                 sleep 100 &

Die Zahl in eckigen Klammern ist die Job-Nummer, die folgende Zahl die PID. Das Pluszeichen markiert den aktuellen Job, auf den sich fg ohne Argument bezieht.

Praxis-Tipps

  • Pausierte Jobs bleiben im Speicher, bis sie fortgesetzt oder beendet werden — vor dem Ausloggen mit jobs prüfen.
  • Für echte Parallelität in Skripten eignen sich xargs -P oder eine explizite Warteschlange mit wait.
  • Systemd-Dienste statt eigener Hintergrundprozesse verwenden, wenn ein Dienst dauerhaft laufen soll: siehe systemctl und journalctl.

Verwandte Grundlagen: Bash-Befehle, ps, top und kill, grep-Befehle, xargs-Befehle, Pipeline, Variable, history-Befehle.