Process Management: Jobs & Pipes (Artikel 250)
Beherrschung der Prozesssteuerung unter Linux. Erfahren Sie alles über Hintergrundprozesse, Job-Control, Named Pipes und die effiziente Verkettung von Befehlen.
# Process Control Masterclass: Jobs, Pipes und Signale
TL;DR / Management Summary Wer nur einen Befehl nach dem anderen tippt, nutzt nur einen Bruchteil der Linux-Power. Ein Senior Admin nutzt Job Control, um langwierige Prozesse in den Hintergrund zu schieben (
&), befreit sie vom Terminal-Zwang (disown) und verkettet dutzende Werkzeuge mittels Pipes (|), um komplexe Datenströme in Echtzeit zu transformieren. In diesem Modul lernen wir, wie man Herr über hunderte Prozesse bleibt, ohne den Überblick zu verlieren.
# 1. Einführung & Architektur
Der Datenfluss.
In Linux ist jeder Befehl ein Prozess. Pipes verbinden die Standard-Ausgabe (stdout) eines Prozesses mit der Standard-Eingabe (stdin) des nächsten.
# Die Pipeline-Architektur (Mermaid)
graph LR
A[cat access.log] -->|stdout to stdin| B[grep '404']
B -->|stdout to stdin| C[awk '{print $1}']
C -->|stdout to stdin| D[sort | uniq -c]
D -->|stdout| E[Final Result: Terminal]
subgraph "Execution Layer"
F[Background Job &]
G[Stopped Job CTRL+Z]
end
# 2. Job Control: Multitasking im Terminal
Prozesse jonglieren.
# In den Hintergrund schieben
# Befehl direkt im Hintergrund starten
./long_backup.sh &
# Laufenden Befehl pausieren und wegschieben
# 1. CTRL + Z drücken (Pausiert Prozess)
# 2. 'bg' eingeben (Lässt ihn im Hintergrund weiterlaufen)
# Zurückholen und Verwalten
# Liste aller Jobs dieser Shell
jobs
# Job Nr. 1 wieder in den Vordergrund holen
fg %1
# 3. Disown und nohup: Überleben ohne Terminal
Prozesse persistent machen.
Normalerweise stirbt ein Hintergrundprozess, wenn Sie die SSH-Sitzung schließen (SIGHUP).
# nohup (Vorher entscheiden)
nohup ./script.sh &
# Output landet automatisch in 'nohup.out'
# disown (Hinterher entscheiden)
Wenn der Prozess bereits läuft und Sie nach Hause wollen:
./script.sh &
disown %1
# Jetzt können Sie das Terminal schließen, der Prozess läuft weiter.
# 4. Day-2 Operations: Fortgeschrittene Pipes
Mehr als nur grep.
# Tee: Abzweigungen im Datenstrom
tee schreibt die Ausgabe in eine Datei und reicht sie an den nächsten Befehl weiter.
cat logs | tee backup.log | grep "ERROR"
# Named Pipes (FIFO)
Erstellen Sie eine Datei, die als permanenter Puffer zwischen zwei Programmen dient.
mkfifo /tmp/my_pipe
# Prozess A schreibt: echo "Hallo" > /tmp/my_pipe
# Prozess B liest: cat /tmp/my_pipe
# 5. Troubleshooting & “War Stories”
Wenn der Prozess nicht stirbt.
# Story 1: “Der hängende disown-Job”
Symptom: Ein Admin hat einen Job mit & gestartet und disown gemacht. Der Prozess braucht nun 100% CPU, aber er taucht nicht mehr in jobs auf.
Ursache: disown entfernt den Job aus der internen Tabelle der aktuellen Shell.
Lösung: Nutzen Sie ps aux | grep <name> oder pgrep <name>, um die System-PID zu finden, und killen Sie ihn mit kill -9 <PID>.
# Story 2: “Broken Pipe Errors”
Symptom: Ein Skript bricht mit EPIPE oder Broken Pipe ab.
Ursache: Der empfangende Teil einer Pipe (z.B. head -n 1) hat sich bereits beendet, während der sendende Teil noch Daten schickt.
Lösung: Dies ist oft normales Verhalten. Falls es Fehler in Logs verursacht, nutzen Sie trap '' PIPE am Anfang Ihres Skripts, um das Signal zu ignorieren.
# 6. Fazit & Empfehlung
- Wahl: Nutzen Sie tmux oder screen für wirklich wichtige, langlaufende Tasks. Job-Control ist gut für kurze Hintergrund-Aktionen.
- Performance: Lange Pipes (
A | B | C | D) sind extrem effizient, da der Kernel das Buffering zwischen den Prozessen im RAM übernimmt. - Wichtig: Prüfen Sie regelmäßig mit
topoderhtop, ob Ihre Hintergrund-Jobs das System überlasten.
# Anhang: Cheatsheet
| Befehl | Wirkung |
|---|---|
& |
Startet im Hintergrund. |
CTRL + Z |
Pausiert Vordergrund-Prozess. |
bg |
Setzt pausierten Prozess im Hintergrund fort. |
fg |
Holt Prozess in den Vordergrund. |
jobs |
Listet Jobs der aktuellen Shell. |
disown -a |
Koppelt alle Jobs vom Terminal ab. |
kill %1 |
Beendet Job Nr. 1. |
wait |
Wartet im Skript, bis alle Hintergrund-Jobs fertig sind. |
| ` | &` |