Navigationsleiste  |    Direktzugriff   |    Kurs  |     Home  


Linux-Kurs: Prozess-Verwaltung unter Linux


Wie du ja mittlerweile weißt (oder nicht) ist Linux ein Multitasking-Betriebssystem, es kann mehrere Programme quasi gleichzeitig laufen lassen. Linux gibt jedem Programm einen Sekunden-Bruchteil in dem es seine Arbeit verrichten muß, so kommt jedes Programm mal an die Reihe und der Benutzer denkt alle Programmen laufen gleichzeitg nebeneinander. Möchtest du mehrere Programm wirklich gleichzeitig laufen lassen, brauchst du auch mehrere Prozessoren.



Prozess-Status

Jedes laufende Programm besteht aus einem oder auch mehreren Prozessen und jeder Prozess hat einen Status. Damit das etwas klarer wird, gibt mal bitte als root den Befehl ps (Prozess Status) ein:

[root] # ps -fx         #Laufende root-Prozesse anzeigen
...
PID TTY STAT TIME COMMAND
1 ? S 0:04 init
2 ? SW 0:00 [kflushd]
3 ? SW 0:00 [kupdate]
4 ? SW 0:00 [kswapd]
201 ? S 0:00 /sbin/syslogd
203 ? S 0:00 /usr/sbin/sshd
207 ? S 0:00 /sbin/klogd -c 1
214 ? S 0:00 /usr/sbin/lpd
379 tty4 S 0:00 /sbin/mingetty tty4
1583 pts/3 S 0:00 bash
1855 pts/3 R 0:00 \_ ps -fx


Das sagt uns nun folgendes (ich nehme mal unseren ps Befehl):

1855 pts/3 R 0:00 \_ ps -fx
Prozess
-Nummer
Terminal Prozess-
Status
verbrauchte
Rechenzeit in MM:SS
Datei-
Name (+ Parameter)

Nun erstmal die wichtigsten Prozess-Statuse (?!):
R running = läuft
S sleeping = schläft und wartet auf Arbeit
Z zombie = existiert nur kurz und verschwindet dann. Kann aber auch stehen bleiben, wenn der Eltern-Prozess gestorben ist.
Hat keine Nachteile im System, kann ruhig komplett beendet werden
W belegt keine Seiten im Speicher


Der Befehl ps kennt dutzende von Parameter, hier mal die Wichtigsten (die lassen sich auch gut kombinieren):

-a    Prozesse aller User anzeigen
-f zeigt eine Baumansicht
-l detailiertere Ausgabe
-u zeigt den Besitzer des Prozesses an
-x zeigt auch Prozesse an die zu keinem Terminal gehören

Du solltest auch mal den Befehl pstree ausprobieren. Was passiert siehst du schon ...
Ein weiteres nettes Programm zum Prozess überwachen ist top. Dieses solltest du in einem eigenen großen Fenster laufen lassen, da es sich alle 5sec aktualisiert. Beendet wird es mit der Taste <q>


Prozesse beenden

Kennst du die Prozess-Nummer, kannst du jeden Prozess (als root) beenden, bzw. killen (ja da heiß wirklich so). Der dazu benutze Befehl ist kill.
Du sagst ihm welchen Prozess er killen soll und er tut es:

[root] # kill 1522         #Prozess-Nummer 1522 wird beendet


Nun wird dem Prozess das SIGTERM-Signal gesendet und er wird sich gleich beenden....
Sollt der Befehl direkt gekillt werden, ohne ihm die Chance zu geben aufzuräumen oder ist es ein Zombie-Prozess, kannst du folgendes eingeben:

[root] # kill -KILL 1522         #Prozess-Nummer 1522 wird SOFORT beendet


Das solltest du aber nur im Notfall machen !!!

Einigen Prozessen kann auch ein -HUP gesendet werden, damit sie ihre Konfiguration neu einlesen. Das steht dann in der man-Pages des Programmes.



Prozess-Priorität ändern

Jeder Prozess besitzt eine bestimmte Priorität bzw. Rechenzeit. Diese Priorität verteilt Linux selber und im Normalfall haben alle Programme die Priorität 0. Die Priorität verteilt sich von 20 bis -20: 20 ist ganz niedrig und -20 ganz hoch.
Im Normalfall solltest du an der Priorität nichts ändern, manchmal kann es nützlich.

Ein Beispiel: Du möchtest im Hintergrund ein Backup-Programm laufen lassen, möchtest aber beim Arbeiten nicht groß gestört werden. Du kannst das Backup-Programm mit einer niedrigen Priorität starten:

tux $ nice -n 10 backup.sh           #Programm backup.sh mit der niedrigen Priorität 10 starten

Anzeigen kannst du die Priorität übrigens bei ps mit dem Parameter -l, oder mit top (Zeile NI).

Mit dem Befehl renice kann root (sonst keiner) die Priorität eines laufenden Prozesses ändern. Auch darf nur root eine höhere Priorität als 0 erteilen.


Benutzer   
Inhalt   
Init

Erstellt: 2001-03-29 Autor: Markus Ungermann (markus@tuxhausen.de)
Letztes Update: 2007-10-06      URL: http://www.tuxhausen.de/kurs_prozesse.html