next up previous contents
Nächste Seite: Das Speichermanagement Aufwärts: Betriebssystem UNIX Vorherige Seite: Eigentümer, Gruppen und andere   Inhalt


Die Prozessverwaltung

Ein wesentliches Leistungsmerkmal von Unix ist die Fähigkeit zum multi-tasking. Das bedeutet, dass der Rechner quasi-zeitgleich mehrere Programme bzw. Kommandos (tasks) ausführen kann. Bis jetzt wurde in diesem Skript immer ein Kommando gegeben und die Shell, s. Abschnitt 3.2.6 auf Seite [*], antwortete erst nach Beendigung des Kommandos mit einem Prompt. Alle Kommandos wurden also nacheinander abgearbeitet. Wie startet man aber mehrere Programme, die gleichzeitig laufen sollen? Es gibt dazu zwei wichtige Möglichkeiten:

Abbildung 3.3: Zeitlicher Verlauf von Prozessen
\begin{figure}\begin{center}
\begin{picture}(130,80)
\put(0,0){\framebox (130,80...
...){\makebox(0,0){\footnotesize exitstatus}}
\end{picture}\end{center}\end{figure}

In Abbildung 3.3 ist der zeitliche Ablauf von verschiedenen Prozessen dargestellt. Ausgangspunkt ist der Prozess . Dies ist die C-Shell, also das Programm, das unsere Eingaben annimmt und entsprechende Betriebssystemaufrufe veranlasst. Näheres siehe Abschnitt 3.2.6. In der Abbildung wird im Hintergrund mit der Fortrancompiler aufgerufen. Da der Compiler im Hintergrund läuft, können sowohl als auch aktiv sein, was durch die durchgezogenen Linien dargestellt wird. Dagegen wird das Kommando im Vordergrund gestartet, so dass der Prozess bis zur Beendigung von warten muss, was durch die gestrichelte Linie dargestellt ist. Es soll jetzt erklärt werden, wie man beliebige Prozesse vom Vordergrund in den Hintergrund und zurück schickt. Betrachten wir zunächst die Möglichkeiten, einen Prozess anzuhalten. Mit
\fbox{{\tt <ctrl+d>} }
wird an einen auf Input wartenden Job ein Dateiendezeichen gesandt. Mit
\fbox{{\tt <ctrl+c>} }
wird an einen Job ein Interrupt-Signal gesendet. Manche Kommandos werden daraufhin (vorzeitig) beendet, andere ignorieren dies. Mit
\fbox{{\tt <ctrl+z>} }
wird ein Kommando nur angehalten, dies aber sicher. Die C-Shell selber verwaltet gestoppte Prozesse und Hintergrundprozesse unter der Vergabe von Jobnummern. Diese kann man mit dem Kommando
\fbox{{\tt jobs} }
auflisten. Mit dem Kommando
\fbox{{\tt fg} [{\tt \%}{\it jobnummer}]}
wird der Job in den Vordergrund geholt und mit
\fbox{{\tt bg} [{\tt \%}{\it jobnummer}]}
in den Hintergrund geschickt. Beispiel:

svr50> clean
^Z
Suspended
svr50> jobs
[1]  + Suspended              clean
svr50> bg
[1]    clean &
svr50> jobs
[1]    Running              clean
svr50>
[1]    Done                 clean
svr50>

Das -Kommando erlaubt die Ausgabe von Systeminformationen über alle laufenden Prozesse.
\fbox{{\tt ps} [{\tt -auxl}]}
Ohne Optionen gibt nur die wichtigsten Informationen über die Prozesse aus, die vom Benutzer an diesem Terminal gestartet wurden. In der ersten Spalte wird dabei die eindeutige Nummer jedes Prozesses angezeigt (process identification number -- PID). Diese Nummer kann benutzt werden, um mit dem Kommando Prozesse zu stoppen, egal ob sie im Vorder- oder Hintergrund laufen.
\fbox{{\tt kill} [{\tt -9}] {\it proze\ss{}nummer}}
Dabei können natürlich nur eigene Prozesse gestoppt werden und nicht die anderer Benutzer. Die Option des Kommandos gibt auch die User-ID des Nutzers aus, der den jeweiligen Prozess gestartet hat.

svr50> cd
svr50> clean &
[1] 6031
svr50> ps
  PID TT STAT  TIME COMMAND
 5825 p0 S     0:02 -csh (csh)
 6031 p0 S     0:00 /bin/sh clean
 6032 p0 S     0:00 sleep 99
 6033 p0 R     0:01 ps
svr50> kill -9 6031

[1]    Killed               clean
svr50> ps
  PID TT STAT  TIME COMMAND
 5825 p0 S     0:02 -csh (csh)
 6037 p0 R     0:01 ps
svr50>
Das Kommando
\fbox{{\tt top} }
zeigt an, welche Prozesse zum jeweiligen Zeitpunkt laufen und wieviel CPU-Zeit sie benötigen. Sollte es bei der Benutzung eines Rechners vorkommen, dass er nicht mit der normalen Geschwindigkeit arbeitet, lohnt der Aufruf des Befehls . Die Ausgabe sieht dann ungefähr so aus:
  PID USER     PRI  NI  SIZE  RSS SHARE STAT  LIB %CPU %MEM   TIME COMMAND 
26896 hansen    12   0  5596 5596  3348 R       0 98.3  5.7   0:02 netscape
Die Spalte gibt an, dass der momentan 98.3% der Rechenzeit beansprucht. Wenn weitere Prozesse auf der CPU rechnen wollen, muss der Scheduler eine Zuteilung vornehmen. Wenn sehr viele Prozesse, viele Ressourcen beanspruchen, können sich die Ausführungszeiten durch mehrfaches Ein- und Auslagern von Prozessen stark erhöhen, was dann zu schlechteren Antwortzeiten des Systems führt. Man sollte dann schauen, ob nicht noch unnötige Prozesse laufen. Das Beispiel des Browsers ,,Netscape`` ist nicht zufällig gewählt. Es kommt öfter vor, dass dieser Prozess nicht richtig beendet wird. Er kann dann mit dem o.g. und der entsprechenden PID ,,abgeschossen`` werden, was, wie schon gesagt, natürlich nur auf einen eigenen Prozess zutrifft.


next up previous contents
Nächste Seite: Das Speichermanagement Aufwärts: Betriebssystem UNIX Vorherige Seite: Eigentümer, Gruppen und andere   Inhalt
Lars Tornow 2003-04-02