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.