Vordergrund & Hintergrund
Wenn ein Befehl in der Shell gestartet wird, läuft er standardmäßig im Vordergrund: Die Shell wartet, bis der Prozess beendet ist – in dieser Zeit nimmt sie keine weiteren Befehle an. Lange laufende Prozesse lassen sich stattdessen in den Hintergrund schicken.
Vordergrundprozesse steuern
Abschnitt betitelt „Vordergrundprozesse steuern“Strg+C – Prozess beenden
Abschnitt betitelt „Strg+C – Prozess beenden“Sendet SIGINT (Interrupt) an den Vordergrundprozess. Die meisten Programme beenden sich daraufhin sauber:
ping google.com# PING google.com ...# ^C ← Strg+C# --- ping statistics ---Strg+Z – Prozess anhalten
Abschnitt betitelt „Strg+Z – Prozess anhalten“Sendet SIGSTOP und versetzt den Prozess in den Zustand Stopped – er ist nicht beendet, nur eingefroren:
vim bericht.txt# (bearbeiten...)# ^Z# [1]+ Stopped vim bericht.txtDie Shell meldet sich zurück. Der Prozess wartet im Hintergrund auf Weiterführung.
Hintergrundjobs verwalten
Abschnitt betitelt „Hintergrundjobs verwalten“jobs – laufende Jobs anzeigen
Abschnitt betitelt „jobs – laufende Jobs anzeigen“jobs# [1]+ Stopped vim bericht.txt# [2]- Running ping google.com &Die Zahl in eckigen Klammern ist die Job-Nummer – eine Shell-interne ID, unabhängig von der PID.
bg – angehaltenen Job im Hintergrund fortsetzen
Abschnitt betitelt „bg – angehaltenen Job im Hintergrund fortsetzen“bg # letzten angehaltenen Job weiterlaufen lassenbg %1 # Job Nummer 1 im Hintergrund fortsetzenfg – Job in den Vordergrund holen
Abschnitt betitelt „fg – Job in den Vordergrund holen“fg # letzten Hintergrundjob in den Vordergrundfg %1 # Job Nummer 1 in den Vordergrund& – direkt im Hintergrund starten
Abschnitt betitelt „& – direkt im Hintergrund starten“Ein & am Ende des Befehls startet ihn sofort im Hintergrund:
long-running-script.sh &# [1] 1042 ← Job-Nummer und PID
ping -c 100 google.com &# [2] 1043Die Shell ist sofort wieder verfügbar. Die Ausgabe des Hintergrundprozesses erscheint weiterhin im Terminal – was manchmal störend ist:
long-running-script.sh > ausgabe.log 2>&1 &# Ausgabe komplett in Datei umleitennohup – Prozess nach Shell-Ende weiterlaufen lassen
Abschnitt betitelt „nohup – Prozess nach Shell-Ende weiterlaufen lassen“Wenn die Shell beendet wird (z. B. SSH-Verbindung trennt), erhalten alle Hintergrundjobs SIGHUP und beenden sich. nohup (No Hang Up) schützt einen Prozess davor:
nohup ./backup-script.sh &# nohup: ignoring input and appending output to 'nohup.out'Die Ausgabe landet automatisch in nohup.out (oder einer umgeleiteten Datei):
nohup ./backup-script.sh > backup.log 2>&1 &Überblick: Job-Steuerung
Abschnitt betitelt „Überblick: Job-Steuerung“Befehl starten ─────────────────────────► Vordergrund (Shell blockiert) │ Strg+Z │ Strg+C │ ▼ │ Prozess beendet ▼ Stopped (eingefroren) │ bg %n │ fg %n ▼ ▼Befehl & starten ──► Hintergrund (Running) ◄───┘ Vordergrund