Wenn ein Programm nicht mehr reagiert
Ein Prozess ist ein Programm, das gerade läuft. Wer einen Server betreut, muss Prozesse finden und beenden können.
Auf deinem Handy hältst du eine App an, die hängt. Auf einem Server geht das mit einem Befehl, denn dort gibt es keinen Knopf zum Wischen. Heute lernst du, wie.
Am Ende dieser Lektion
Notiz
Ich kann ein Programm finden und beenden und einen Dienst prüfen.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Prozess | ein Programm, das gerade läuft | |
| PID | die Nummer, unter der ein Prozess läuft | |
| Signal | eine Nachricht, die ein Prozess von außen bekommt | kill -9 |
| Dienst | ein Programm, das im Hintergrund dauerhaft läuft | |
| systemd | das Programm, das Dienste startet und überwacht |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Bevor du anfängst
Notiz
Läuft das Lab noch aus der letzten Lektion, arbeite einfach weiter. Sonst drück oben in der Leiste auf Lab starten und warte eine Minute. Im Lab laufen schon mehrere Programme für dich zum Üben. Du darfst sie alle beenden.
Jedes laufende Programm hat eine Nummer
Wenn du ein Programm startest, macht Linux daraus einen Prozess und gibt ihm eine Nummer, die PID. Mit ihr kannst du genau diesen Prozess ansprechen.
Der Befehl ps listet Prozesse auf. Der Befehl pgrep name sucht Prozesse nach ihrem Namen und gibt ihre PIDs aus. Mit -c zählt er sie nur.
Beispiel: eine Prozessliste
ps -u student -o pid,comm
PID COMMAND
2210 lab-worker
2211 lab-stubborn
2305 bashDie Übungsprogramme zählen
pgrep -c lab-Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die PID eines Prozesses ausgeben
pgrep lab-workerHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Mit einem Signal beendest du einen Prozess
Ein Signal ist eine Nachricht an einen Prozess. Der Befehl kill schickt eines, pkill name schickt es nach Namen.
Das normale Signal bittet höflich: „Beende dich bitte.“ Die meisten Programme tun es. Ein hartnäckiges Programm überhört die Bitte. Dann hilft kill -9: Dieses Signal kann kein Prozess ablehnen.
Zwei Wege, einen Prozess zu beenden
| Befehl | Wirkung | Wann |
|---|---|---|
| kill 2210 | Bittet den Prozess 2210, sich zu beenden | Zuerst immer dieser Weg |
| kill -9 2210 | Beendet ihn sofort, ohne Rückfrage | Erst wenn die Bitte nichts nützt |
| pkill name | Wie kill, aber nach Namen | Wenn du die PID nicht kennst |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Das Programm lab-worker bitten, sich zu beenden
pkill lab-workerHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Zählen, ob es noch läuft
pgrep -c lab-workerHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Dasselbe bei lab-stubborn versuchen
pkill lab-stubbornHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Zählen, ob lab-stubborn noch läuft
pgrep -c lab-stubbornHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Das Signal 9 an lab-stubborn schicken
pkill -9 lab-stubbornHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Noch einmal zählen
pgrep -c lab-stubbornHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein häufiger Fehler
Warnung
Viele greifen sofort zu kill -9, weil es immer wirkt. Das ist riskant. Das Programm kann dann nicht mehr aufräumen und speichern. Versuche zuerst die höfliche Bitte und nimm Signal 9 nur, wenn der Prozess nicht reagiert.
Ein Dienst läuft für dich im Hintergrund
Eine Webseite oder eine Datenbank soll immer laufen, auch wenn niemand angemeldet ist. Dafür gibt es Dienste. Das Programm systemd startet sie beim Hochfahren und überwacht sie.
Mit systemctl is-active name fragst du, ob ein Dienst läuft. Starten und stoppen darf nur ein Konto mit mehr Rechten, meist mit sudo.
Fragen, ob der Webdienst läuft
systemctl is-active lab-webHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Beim Webdienst eine Datei abrufen
curl -s --noproxy "*" http://localhost:8000/hello.txtHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.