Dr. Matthias Grabert Abteilung Angewandte Informationsverarbeitung 19. April 2002
Christian Ehrhardt Blatt 1


Uni Logo



Systemnahe Software (SS 2002)


Abgabetermin 30.04.2002

fork-Lawinen (10 Punkte)

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.

for fork (Vorüberlegung)

Wieviele Prozesse würden durch die folgende for-Schleife erzeugt (Nicht ausprobieren!):
for (i=0; i $<$ 4; ++i) fork ();

Prozeßgruppen

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.

Mehr Kinder

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