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.