[Zurück] [Home] [Weiter]       http://rowa.giso.de  

Eine frei verwendbare Unix-Grundlagenschulung mit muLinux

Prozeßverwaltung

Unter DOS kann der Nutzer nur jeweils ein Programm ausführen. Notwendige, aber zeitaufwendige Aufgaben, wie z. B. das Drucken, oder das Formatieren von Disketten, lassen den Nutzer warten, bis der Vorgang beendet ist. Unter Windows läßt sich schon mehr als ein Programm zur gleichen Zeit ausführen. Unix war aber schon immer ein Multi-User- und Multi-Tasking-System.

Multi-User meint, daß mehrere Nutzer gleichzeitig am gleichen Rechner arbeiten können. Dies müssen nicht unbedingt unterschiedliche Menschen sein. Ein Mensch kann sich auch mehrmals einloggen. Dies ist bei Linux über die virtuellen Konsolen möglich. Zusätzliche Nutzer können sich auch über ein Netzwerk einloggen.

Multi-Tasking bedeutet hingegen, daß ein Nutzer mehrere Programme gleichzeitig ausführen kann. Man kann z. B. einen längeren Text ausdrucken und gleichzeitig eine Diskette formatieren.

Ein Prozeß ist ein in der Ausführung befindliches Programm mit seiner Ausführungsumgebung. Diese Programm kann ein Anwendungsprogramm oder ein für den Nutzer nicht sichtbares Programm (engl. daemon) sein. Jeder Prozeß arbeitet in einem separaten, virtuellen Adressraum, so kann kein Prozeß einen anderen wissentlich (z. B. durch Viren) oder unwissentlich stören. Den einzelnen Prozesses wird nacheinander der Zugriff auf die CPU (Prozessor) erlaubt. Wie lange und in welcher Reihenfolge dies geschieht, wird durch den Prozeß-Scheduler (engl. Zeitplan) bestimmt. Wenn ein Programm "hängt" kann es nicht, wie bei manch primitiven Betriebsystemen, den ganzen Rechner lahmlegen.

Alle Prozesse werden über die zentrale Prozeßtabelle verwaltet. Die Prozesse stehen in einer hierarchischen Ordnung, da jeder Prozeß eine eindeutige Nummer (Prozeßnummer, PID) und die Nummer des Elternprozeßes (Erzeugerprozeß) mit sich führt. Ähnlich wie bei den Zugriffsrechten bei Dateien gilt für die Prozeßverwaltung und das Speichermanagement: Ein Prozeß kann nur von seinen User beeinflußt werden.

Anzeige aller laufenden Prozesse mit ps

Es ist mitunter notwendig die Übersicht über laufende Prozesse zu haben. Der Befehl ps zeigt eine Liste der im Speicher befindlichen Prozesse an.

/# ps
PID  TTY  STAT  TIME:  COMMAND
...
/# _

Jeder Prozeß, also jedes laufende Programm, wird mit einer Zeile dargestellt. Mit den Namen der meisten Prozesse werden wir bis jetzt noch nicht viel anfangen können.

PID

Jeder Prozeß erhält beim Starten eine eindeutige Nummer (Process Identifier), über die er auch angesprochen werden kann. So läßt sich z. B. jeder Prozeß mit dem Befehl  kill PID  beendet (s. u.). Für jeden Prozeß (engl. process) wird ein Unterverzeichnis im virtuelles Dateisystem /proc erstellt. Dies kann mit  ls /proc  kontrolliert werden.

TTY

TTY zeigt die Nummer des Terminals bzw. der virtuellen Konsole, an dem der Prozeß gestartet wurde. Manche Prozesse werden aber vom System gestartet und sind daher keiner Konsole zugeordnet. Diese Angabe scheint bei muLinux nicht zu funktionieren.

STAT

Hier wird der Status des Prozesses symbolisiert.

TIME:

Die wirklich verbrauchte Rechenzeit in Minuten und Sekunden.

COMMAND

Der Name Programm im Prozeß.

Befehl im Hintergrund &

Wenn ein Befehl sofort nach dem Start in den Hintergrund geschoben werden soll, so muß der eigentlichen Befehlszeile das Ampersan-Zeichen & folgen. Durch dieses Zeichen arbeitet der Befehl im Hintergrund und meldet nur kurz seine PID. Dies ist sinnvoll bei längeren Programmabläufen, wenn keine Nutzereingaben mehr notwendig sind.

/# find / -user craxi -print &

Quittiert wird dieser Befehl mit einer Zeile. Zum Beispiel:

[3] 12304

Die Zahl in eckigen Klammern gibt an, wievielt Jobs nun im Hintergrund laufen. Die zweite Zahl ist die PID.

Zu beachten ist, daß Jobs, die im Hintergrund arbeiten, weiterhin auf den Bildschirm schreiben, und dabei die Arbeit im Vordergrund erheblich stören können. Man kann aber die Möglichkeit der Datenumleitung mittels > nutzen, um die Ausgabe in eine Datei schreiben. Fehlermeldungen lassen sich mit 2> umleiten.

/# find / -user craxi -print 2> /dev/null > /a/gefunden.txt &

Beenden von Prozessen mit kill

Mitunter passiert es, daß ein Programm sich nicht beenden läßt oder wir nicht wissen wie wir es beenden können. Hier hilft der Befehl kill (engl. töten, vernichten). Da wir hier nicht wild irgendwelche Programme abschießen wollen, starten wir erst mal ein Programm zum Abschießen. Als Beispiel verwenden wir den Taschenrechner bc.

/# bc

Jetzt wechseln wir zur zweiten virtuellen Konsole mit [Alt] [F2]. Dort loggen wir uns als root ein. Um den Befehl kill anzuwenden brauchen wir die Prozeßnummer (PID). Diese ermitteln wir mit ps:

/# ps
...
> _

Wem die Ausgabe zu lang ist, kann auch mit folgender Variante die Ausgabe auf die Prozesse mit "bc" filtern:

/# ps | grep "bc"
26845  ? s 0:0 (bc) mawk -f /usr/bin/bc

Die erste Nummer ist die Prozeßnummer. Diese weicht sicherlich mit der auf Deinen Bildschirm ab. Verwende die Nummer die bei Dir angezeigt wird. Außerdem erscheinen noch weitere Zeilen mit "grep" und "sed". Das sind die Prozesse für den gerade verwendeten grep-Befehl. Diese Zeilen sind uninteressant. Jetzt wollen wir den Prozeß mit dem Taschenrechner bc beenden:

/# kill -9 26845

Die Option -9 bewirkt, daß der Prozeß auf jeden Fall beendet wird. Wird diese Option weggelassen, hat das Programm noch die Möglichkeit bei Bedarf Daten zu speichern. Wenn wir nun zur ursprünglichen Konsole zurückwechseln, sehen wir folgende Ausgabe:

/# ps
...
> Killed
/# _

Der Prozeß mit dem Taschenrechner wurde also beendet. Natürlich kann man nur eigene Prozesse beenden. Eine Ausnahme bildet hier wieder der Superuser.

[Zurück] [Home] [Weiter]