Dr. Matthias Grabert Abteilung Angewandte
Informationsverarbeitung 19. April 2002
Christian Ehrhardt Blatt 1
Systemnahe Software (SS 2002)
Abgabetermin 30.04.2002
In der Vorlesung wurde bereits der Systemcall fork vorgestellt.
Leider kommt es immer wieder vor, daß Studenten fehlerhafte
Programme erstellen, die z.B. fork in einer Endlosschleife
aufrufen und dadurch mehr Prozesse erzeugen, als das Betriebssystem
verwalten kann. In diesem Blatt soll eine Lösung entwickelt werden,
die in solchen Fällen Abhilfe schaffen kann. Programme, die
fork verwenden sollten grundsätzlich zuerst auf einem
Arbeitsplatzrechner und nicht auf einem unserer Server getestet werden.
Wieviele Prozesse würden durch die folgende for-Schleife
erzeugt (Nicht ausprobieren!):
for (i=0; i 4; ++i) fork ();
Um eine fork-Lawine gezielt beenden zu können, machen wir uns jetzt
Prozeßgruppen zu nutze. Euer Programm soll zunächst ein einziges
Kind erzeugen, das sich dann selbst zum process group leader einer
neuen Prozeßgruppe macht. Wenn das schief geht soll der Vaterprozeß
durch ein TERM Signal benachrichtigt bzw. beendet werden. Damit die
Prozeßgruppe auch wirklich als Gruppe bezeichnet werden kann soll
der Kindprozeß noch ein eigenes Kind erzeugen. Alle Kindprozesse
sollen Ihre eigene Prozeß-ID und die Prozeß-ID Ihres Erzeugers ausgeben
und dann für 500 Sekunden schlafen bevor sie normal terminieren.
Der Vaterprozeß (also der, mit dem wir angefangen haben) soll nach
10 Sekunden allen Prozessen in der erzeugten Prozeßgruppe (und nur
diesen) ein TERM-Signal zukommen lassen. Das bewirkt, daß die
Kindprozesse vorzeitig terminieren. Um ganz sicher zu gehen soll nach
weiteren 10 Sekunden auch noch ein KILL-Signal verschickt werden.
Zu beachten ist, daß der Vaterprozeß keine Möglichkeit hat die
Prozeß-ID des zweiten Kindes zu ermitteln.
Wenn das Programm soweit funktioniert soll es noch so abgeändert
werden, daß der process group leader der neu erzeugten Prozeßgruppe
statt eines einzelnen Kindes 10 Kinder in einer Schleife erzeugt.
Christian Ehrhardt
2002-04-19