Next: Der Service-Verwalter Up: Der Prozeß-Manager Previous: Die Aktion zum

Die Signalroutine

Zur Behandlung der Signale, die gesendet werden, wenn Kindprozesse sterben, dient die Signalroutine. Der Aufruf dieser Signalroutine kann jederzeit den Programmablauf unterbrechen. Wenn die Signalroutine aber globale Datenstrukturen verändert, während eine gerade laufende Aktion dies auch tut, kann es zu inkonsistenten Daten führen. Die Ereignisse Aktion ausführen und Signal bearbeiten müssen also zeitlich nacheinander ausgeführt werden. Aus diesen Gründen wird für jedes eingetroffene Signal die PID und der Prozeßstatus erfragt. Diese Information wird sofort mit Hilfe der Möglichkeit, sich innerhalb eines Programms eine Nachricht über das Messagesystem zu schicken, in die Warteschlange gestellt, in der auch die normalen Messagesystem-Nachrichten ankommen. Damit ist diese Routine beendet und steht für weitere Signale bereit.

Wenn die Nachricht in der Warteschlange an der Reihe ist, kann sie ausgewertet werden. Da sie keine Nachricht nach dem ECS-Protokoll ist, wird die Funktion no_ecs_msg_received der DevServiceSet-Klasse aufgerufen (siehe Abschnitt ). Die Klasse DevServiceSet, die man normalerweise benutzt, führt nun in dieser Funktion überhaupt keine Arbeiten aus. Aus diesem Grund wird im Prozeß-Manager eine eigene Klasse MyServiceSet verwendet, die alle Eigenschaften von DevServiceSet erbt und die Funktion no_ecs_msg_received selbst definiert.

Hier wird nun anhand der mitverschickten PID der zugehörige Kindprozeß aus der Tabelle der Gerätetreiber herausgesucht. Dann wird überprüft, ob er noch als gestartet markiert ist. Ist dies nicht der Fall, wurde der Prozeß durch die Aktion PROCESS STOP gestoppt und dort schon als gestoppt markiert. Sonst wird er als nicht mehr gestartet markiert und es wird eine Fehlermeldung an den Service-Verwalter verschickt, daß ein Prozeß aufgrund eines Fehlers beendet wurde (siehe Abschnitt ). Danach kann der Prozeß auf Anfrage wieder neu gestartet werden.


martin@daisy.zdv.Uni-Mainz.DE
Fri Apr 21 10:02:42 MESZ 1995