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
wird an einen auf Input wartenden Job ein Dateiendezeichen gesandt. Mit
wird an einen Job ein Interrupt-Signal gesendet. Manche Kommandos werden
daraufhin (vorzeitig) beendet, andere ignorieren dies. Mit
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
auflisten. Mit dem Kommando
wird der Job in den Vordergrund geholt und mit
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.
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.
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
. 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 netscapeDie 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.