Prozess
Der Prozess unterscheidet sich vom Programm dadurch, dass er als Ausführung des Programms betrachtet werden kann; es können mehrere Prozesse desselben Programmes aktiv sein. Jeder Prozess läuft in einem eigenen Adressbereich, der vor anderen Adressbereichen geschützt ist. Ausnahmen bilden Sockets oder die Interprozesskommunikation (IPC).
Jeder Prozess besitzt eine eindeutige Nummer, die Prozess-ID (PID), die über die Befehle pstree, pidof und pgrep angezeigt werden kann. Beim Booten des Systems wird mit der PID 0 begonnen. PIDs werden laufend vom System vergeben und sind einmalig. Sie werden gewrappt - bei etwa 32000 ist Schluss und das System beginnt mit der Vergabe von vorn.
Das Prozesssystem ist bei Unix hierarchisch. Mit Ausnahme von PID 0 hat jeder Prozess eine Eltern-Prozess-ID (engl. Parent Process ID / PPID) - die PPID ist also die PID des Erzeuger-Prozesses. Beispielsweise wird beim Einloggen eine Login-Shell gestartet - alle später in dieser Shell gestarteten Prozesse aus dieser Sitzung sind Kinder dieser Shell. Ein solcher Prozess wird als "process group leader" bezeichnet - stirbt ein solcher Prozess, so sterben im Allgemeinen auch seine Kinder.
Viele Informationen zu laufenden Prozessen finden sich im Verzeichnis "/proc".
Prozessstatus
Ein Prozess befindet sich unter Linux immer in einem der folgenden Zustände, die mit dem Befehl "ps -el" in der Spalte "S" angezeigt werden.
Kürzel | Status | Beschreibung |
---|---|---|
D | uninterruptible sleep | Kann meist nicht mit einfachem kill beendet werden, sondern nur durch Neustart |
R | running or runnable | Der Prozess wird gerade auf dem Prozessor ausgeführt bzw. befindet sich in der Ausführungswarteschlange. |
S | interruptible sleep | Normalzustand - der Prozess ist zur Ausführung bereit. |
T | traced or stopped | Angehalten - entweder durch ein Jobkontrollsignal oder weil der Prozess getracet wird. |
Z | zombie | Zombie-Prozess, der dabei ist, sich zu beenden. |
X | dead | Toter Prozess - ein solcher sollte niemals sichtbar sein. |
Der Linux-Kernel verfügt über einen Prozess-Scheduler und eine Speicherverwaltung, um gestarteten Prozessen Rechenzeit und Speicher zuzuteilen. Ein wählbarer IO-Scheduler bringt Zugriffe auf Datenspeicher in eine geeignete Reihenfolge. Das Ressourcenmanagment regelt den Zugriff auf Hardwarekomponenten.
Der Linux-Kernel startet eigene Prozesse. Dazu verwendet er die Funktion "kthread", die alle weiteren Aktionen anschiebt. Viele KDE-Anwendungen hängen von "kdeinit" ab, einem Mechanismus, der die Startzeiten von KDE-Anwendungen verkürzt.
Jobverwaltung
- jobs zeigt eine Liste der gestarteten Jobs. Der gerade aktuelle Job wird dabei mit einem Pluszeichen markiert.
- bg legt den aktuellen Job ohne weitere Argumente in den Hintergrund, wo er weiterläuft.
- fg bringt den Job wieder in den Vordergrund.
Beispiel
Starten des Befehls "du -s /" im Hintergrund (&).
$ du -s / & [1] 28428
Ansehen des Prozesses 28428 in der Prozesstabelle.
$ ps -lp 28428 F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 0 R 1000 28428 27433 7 80 0 - 843 - pts/2 00:00:06 du
Hintergrund-Job "[1]" wird in den Vordergrund geholt.
$ fg %1 du -s /
Beobachtung von Prozessen
- pstree gibt einen Überblick darüber, welcher Prozess welche anderen Prozesse startet.
- ps zeigt eine Liste aller Prozesse.
- top zeigt eine Liste der Prozesse und aktualisiert diese regelmässig.
- strace zeigt, welche Systemfunktionen ein Prozess aufruft.
Unter KDE erreicht man mit "CTRL+Esc" stets die Prozessliste des KDE-Systemwerkzeugs KSysguard. Das GTK-Pendant Gnome-Systemmonitor schlüsselt zusätzlich über das Kontextmenü "Speicherfelder" den von einem Prozess belegten Speicher genauer auf. Dieselben Informationen liefert auch der Befehl pmap.
Signale
Signale bilden einen einfachen Mechanismus zur Prozesskommunikation. Signale sind asynchrone Ereignisse, die von einem Benutzer an der Dialogstation oder von einem Programmfehler erzeugt werden können. Prozesse können unterschiedlich auf Signale reagieren. "kill -l" zeigt eine Liste der möglichen Signale.
Gängige Signale sind:
Name | Wert | Funktion |
---|---|---|
HUP | 1 | Hang-up. Dient oft dazu, Serverdienste anzuweisen, ihre Konfiguration neu einzulesen. |
INT | 2 | Interrupt. Anhalten des Programms. Identisch zu "CTRL+C". |
KILL | 9 | Kill. Prozess zwangsweise beenden. |
SIGV | 11 | Segmentation Fault. Prozess wegen Speicherschutzverletzung zwangsweise beenden. |
TERM | 15 | Terminate. Prozess bitten, sich zu beenden. |
CONT | 18 | Continue. Prozessausführung fortsetzen. |
STOP | 19 | Stop. Prozessausführung anhalten. |
TSTP | 20 | Terminal. Stop. Identisch wie den Prozess mit "CTRL+Z" anzuhalten. |
Ein Signal wird an einen Prozess geschickt, deshalb muss erst die PID herausgefunden werden. Mit "kill -<Signal> <PID>" wird einem Prozess ein Signal gesendet.
killall und pkill können allen Prozessen mit einem bestimmten Namen oder allen Prozessen eines bestimmten Benutzers ein Signal senden.
KDE kennt für das Signal "KILL" die Tastenkombination "CTRL+ALT+Esc", welche den Mauszeiger in einen Totenkopf verwandelt. Dem Prozess mit dem Fenster, auf das mit der linken Maustaste geklickt wird, schickt KDE das Signal "KILL". Mit der rechten Maustaste kann der Vorgang abgebrochen werden. Die Konfiguration dazu findet sich unter "Regionaleinstellungen & Zugangshilfen > Tastenkürzel > Tastenkombinatione > Allgemeine Tastenkürzel > Verschiedenes > Fenster beseitigen".
Herausgeber | Sprache | Webseitentitel | Anmerkungen |
---|---|---|---|
Wikipedia | ger | Prozess (Informatik)wbm | Enzyklopädischer Artikel |
Wikipedia | eng | Process (computingwbm | Enzyklopädischer Artikel |