Linux Prozessverwaltung: Grundlagen und Befehle
Eingeordnet in Informatik
Geschrieben am in Deutsch mit einer Größe von 9,29 KB
Was ist ein Prozess?
Wie wir wissen, ist ein Programm eine Reihe von Anweisungen und Daten, die in einer normalen Datei gespeichert sind. Sobald ein Programm gelesen und in den Speicher geladen wird, um es auszuführen, wird es zu einem Prozess. Ein Prozess erhält vom Betriebssystem Ressourcen (Speicher, Prozessor, Input/Output, ...) für seine ordnungsgemäße Ausführung zugewiesen. Jeder Prozess ist mit einer Nummer verbunden, die ihn identifiziert. Diese Nummer wird vom Kernel zugewiesen und als Prozess-ID (PID) bezeichnet. Zusätzlich zur PID wird Prozessen eine weitere Nummer zugewiesen, die PPID (Parent Process ID), welche den übergeordneten Prozess identifiziert. Außerdem finden wir eine Gruppen-ID (PGID), die Prozesse miteinander verknüpft.
Prozesszustände
Der Prozess läuft. Auf Maschinen mit einem einzigen Prozessor kann nur ein Prozess gleichzeitig in diesem Zustand sein. Linux ermöglicht es, dass die CPU von mehreren Prozessen gemeinsam genutzt wird, indem die gesamte Prozessorzeit in kleine Scheiben (Zeitscheiben) aufgeteilt und diese abwechselnd den jeweiligen Prozessen zugewiesen werden.
Arten von Prozesszuständen:
- Der Prozess ist eingeschlafen. Ein Prozess tritt in diesen Zustand ein, wenn er seine Ausführung aufgrund mangelnder Ressourcen nicht fortsetzen kann oder auf den Abschluss einer E/A-Operation wartet.
- Der Prozess ist nicht aktiv, aber bereit zur Ausführung. Er kann seine Ausführung fortsetzen, sobald er vom CPU-Scheduler (Planer) ausgewählt wird.
Linux unterscheidet zwischen mehreren Zuständen eines Prozesses:
- D: Ununterbrechbar (Prozess wartet auf E/A)
- S: Schlafend (Sleeping)
- R: Läuft (Running)
- T: Gestoppt (Stopped)
- X: Tot (Dead)
- Z: Zombie (Prozess im Zustand des Todes)
Der Befehl ps
Der Befehl ps
dient dazu, uns über die Prozesse zu informieren, die aktuell auf dem System ausgeführt werden. Wenn wir Argumente übergeben, zeigt er einen kurzen Bericht über die Prozesse, die mit unserem Terminal verbunden sind.
Syntax:
ps [Argumente]
Beispiel:
ps -x
Angezeigte Felder in der Prozessliste:
- UID: User-ID
- PID: Prozess-ID
- PPID: Parent Process ID
- C: Menge der kürzlich vom Prozess genutzten CPU-Ressourcen
- STIME: Zeitpunkt des Prozessstarts
- TTY: Terminal, mit dem der Prozess verbunden ist
- TIME: Dem Prozess zugewiesene CPU-Zeit
- COMMAND: Name des Programms oder Prozesses
- PRI: Priorität des Prozesses
- NI: Nice-Wert, der die Priorität beeinflusst. Ein positiver Wert bedeutet weniger CPU-Zeit.
- VSZ: Größe des Prozessabbilds im virtuellen Speicher
- RSS: Größe des Programmspeichers in KB
- STAT: Status des Prozesses
Der Befehl kill und Signale
Der Befehl kill
wird verwendet, um Signale an einen oder mehrere Prozesse zu senden, die über ihre Prozess-ID identifiziert werden.
Syntax:
kill [-Signal] PID [PID ...]
Wichtige Signale:
- 1 - SIGHUP (Hangup): Wird an alle Prozesse gesendet, die mit demselben Terminal verbunden sind, wenn dieses getrennt wird. Die Standardaktion ist die Beendigung der Prozesse, die es empfangen.
- 2 - SIGINT (Interrupt): Wird an alle Prozesse gesendet, die mit demselben Terminal verbunden sind, wenn die Interrupt-Taste (z.B. Strg+C) gedrückt wird. Standardmäßig führt dies zur Beendigung der Prozesse, die es empfangen.
- 3 - SIGQUIT (Quit): Ähnlich wie SIGINT, wird aber gesendet, wenn Strg+\ gedrückt wird. Standardmäßig führt dies zur Beendigung des Prozesses und zum Erzeugen eines Core-Dumps.
- 4 - SIGILL (Illegal Instruction): Wird an jeden Prozess gesendet, der versucht, eine illegale Anweisung auszuführen. Standardmäßig beendet dies die Ausführung des Programms, das es empfängt.
- 5 - SIGTRAP (Trace/Breakpoint Trap): Wird gesendet, wenn Anweisungen in einem Programm Schritt für Schritt ausgeführt werden (z.B. beim Debugging). Die Standardaktion ist ebenfalls die Beendigung des empfangenden Prozesses.
- 6 - SIGIOT (IOT Trap): Hardwarefehler.
- 7 - SIGEMT (EMT Trap): Hardwarefehler.
- 8 - SIGFPE (Floating-Point Exception): Wird gesendet, wenn die Hardware einen Fehler bei einer Gleitkommaoperation erkennt. Standardmäßig beendet dies die Ausführung des empfangenden Prozesses.
- 9 - SIGKILL (Kill): Erzwingt die sofortige Beendigung eines Prozesses. Dieses Signal kann nicht ignoriert oder abgefangen werden.
- 10 - SIGBUS (Bus Error): Ungültiger Speicherzugriff.
- 11 - SIGSEGV (Segmentation Fault): Verletzung des Speichersegments.
- 12 - SIGSYS (Bad System Call): Nicht verwendet (oder ungültiger Systemaufruf).
- 13 - SIGPIPE (Broken Pipe): Versuch, in eine Pipe zu schreiben, aus der niemand liest.
- 14 - SIGALRM (Alarm Clock): Wird an den Prozess gesendet, wenn sein Timer Null erreicht. Standardmäßig führt dies zur Beendigung des Prozesses.
- 15 - SIGTERM (Termination): Fordert einen Prozess auf, seine Ausführung zu beenden. Dieses Signal kann ignoriert werden.
- 16 - SIGUSR1 (User-defined Signal 1): Reserviert für Benutzeranwendungen.
- 17 - SIGUSR2 (User-defined Signal 2): Reserviert für Benutzeranwendungen.
- 18 - SIGCHLD (Child Stopped or Exited): Wird an den übergeordneten Prozess gesendet, wenn ein Kindprozess stoppt oder stirbt.
- 19 - SIGPWR (Power Fail/Restart): Stromausfall.
Weitere nützliche Befehle
nice
Der Befehl nice
ermöglicht es, ein Programm mit einer von der normalen abweichenden Priorität auszuführen. Nur der Administrator kann die Priorität eines Prozesses erhöhen (d.h. einen negativen Nice-Wert setzen). Der Nice-Wert für normale Benutzer muss zwischen 1 und 19 liegen. Standardmäßig wird ein Wert von 10 verwendet. Die Priorität des Prozesses erhöht sich von Zeit zu Zeit, um sicherzustellen, dass der Prozess nicht 'verhungert'. Nur der Administrator kann die Prozesspriorität mit einem negativen Argument (maximal -19) erhöhen.
Syntax:
nice [-n N] Befehl
nohup
Der Befehl nohup
wird verwendet, wenn wir möchten, dass ein Prozess auch nach dem Beenden der Shell oder dem Abmelden vom System weiterläuft. Normalerweise empfängt ein Prozess, der beim Beenden der Shell noch läuft, das Signal 'Hangup' (SIGHUP) und wird beendet. nohup
verhindert dies. Die Ausgabe der Programmausführung wird in eine Datei umgeleitet; falls keine Datei angegeben ist, wird standardmäßig in nohup.out
geschrieben.
Syntax:
nohup Befehl &
sleep
Der Befehl sleep
wird verwendet, um die Ausführung für eine bestimmte Anzahl von Sekunden zu unterbrechen, bevor mit den folgenden Befehlen fortgefahren wird.
Syntax:
sleep Sekunden
time
Der Befehl time
gibt die Ausführungszeit eines Prozesses in Sekunden aus.
Syntax:
time Befehl [Argumente]
w
Der Befehl w
zeigt an, welche Benutzer aktuell am System angemeldet sind und welche Prozesse sie ausführen. Er zeigt unter anderem: den Benutzernamen, das Terminal, von dem aus die Verbindung hergestellt wurde, die Anmeldezeit, die Leerlaufzeit, die verbrauchte CPU-Zeit und den aktuell ausgeführten Prozess.
fg (Foreground)
Der Befehl fg
(Foreground) wird verwendet, um einen im Hintergrund laufenden Prozess in den Vordergrund zu holen. Ein Prozess kann mit &
in den Hintergrund geschickt oder mit Strg+Z
gestoppt werden. Als Argument kann die Job-ID oder PID des Prozesses übergeben werden, mit dem wir arbeiten möchten.
Beispiel:
sleep 5000 &
(Prozess im Hintergrund starten)fg
(Prozess in den Vordergrund holen)
top
Der Befehl top
zeigt eine dynamische Echtzeit-Übersicht der laufenden Prozesse an (ähnlich dem Task-Manager unter Windows). Die Anzeige kann mit Strg+C
beendet werden.
free
Der Befehl free
zeigt den Status des physischen Speichers (RAM) und des Swap-Speichers sowie der vom System verwendeten Puffer an.
uptime
Der Befehl uptime
zeigt an, wie lange das System bereits läuft, die Anzahl der angemeldeten Benutzer und die Systemlast (Load Average).