Zum Inhalt springen

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.

Sendet SIGINT (Interrupt) an den Vordergrundprozess. Die meisten Programme beenden sich daraufhin sauber:

Terminal-Fenster
ping google.com
# PING google.com ...
# ^C ← Strg+C
# --- ping statistics ---

Sendet SIGSTOP und versetzt den Prozess in den Zustand Stopped – er ist nicht beendet, nur eingefroren:

Terminal-Fenster
vim bericht.txt
# (bearbeiten...)
# ^Z
# [1]+ Stopped vim bericht.txt

Die Shell meldet sich zurück. Der Prozess wartet im Hintergrund auf Weiterführung.

Terminal-Fenster
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.

Terminal-Fenster
bg # letzten angehaltenen Job weiterlaufen lassen
bg %1 # Job Nummer 1 im Hintergrund fortsetzen
Terminal-Fenster
fg # letzten Hintergrundjob in den Vordergrund
fg %1 # Job Nummer 1 in den Vordergrund

Ein & am Ende des Befehls startet ihn sofort im Hintergrund:

Terminal-Fenster
long-running-script.sh &
# [1] 1042 ← Job-Nummer und PID
ping -c 100 google.com &
# [2] 1043

Die Shell ist sofort wieder verfügbar. Die Ausgabe des Hintergrundprozesses erscheint weiterhin im Terminal – was manchmal störend ist:

Terminal-Fenster
long-running-script.sh > ausgabe.log 2>&1 &
# Ausgabe komplett in Datei umleiten

nohup – 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:

Terminal-Fenster
nohup ./backup-script.sh &
# nohup: ignoring input and appending output to 'nohup.out'

Die Ausgabe landet automatisch in nohup.out (oder einer umgeleiteten Datei):

Terminal-Fenster
nohup ./backup-script.sh > backup.log 2>&1 &
Befehl starten ─────────────────────────► Vordergrund (Shell blockiert)
Strg+Z │ Strg+C
│ ▼
│ Prozess beendet
Stopped (eingefroren)
bg %n │ fg %n
▼ ▼
Befehl & starten ──► Hintergrund (Running) ◄───┘ Vordergrund