Kindprozesse empfangen keine Signale

ThePsycho

Vice Admiral Special
Mitglied seit
10.03.2003
Beiträge
637
Renomée
1
Ich verzweifle gerade ein wenig - ich hab mich jetzt schon ausführlich mit dem Thema auseinandergesetzt, aber irgendwie klappt es nicht ganz.

Folgendes Szenario:
Ein Prozess forked mehrere Kindprozesse. Diese Kindprozesse starten wiederum andere externe Dinge (z.B. irgendwelche Skripte), also etwa so:

Code:
Hauptprozess
   |
  + Kindprozess 1
   |   |
   |  + Skript 1
   |
  + Kindprozess 2
       |
      + Skript 2

Läuft soweit auch, bis auf zwei Ausnahmen:
1. In manchen Fällen ist es nötig, dass der Hauptprozess ein Kindprozess abschießen muss. In diesem Fall schickt er das TERM-Signal an den entsprechenden Kindprozess.
Das soll passieren:
Kindprozess schickt seinerseits TERM-Signal an das Skript, alles beendet sich - erledigt.
Das passiert allerdings tatsächlich:
Kindprozess verarbeitet das Signal nicht und hängt ebenso wie der Skript-Prozess in der Luft, es hilft nur noch ein KILL-Signal.

2. Das Skript selbst führt evtl. eine Operation durch, die eines Timeout bedarf. Um das zu handeln, schickt sich das Skript m Falle des Falles ein ALRM-Signal (per alarm(), ist ein Perl-Skript).
Allerdings wird auch hier das Signal nicht verarbeitet, Skript-Prozess hängt einfach und lässt sich nur per KILL abschießen.


Was geht hier schief? Das sollte doch eigentlich völlig problemlos laufen?
Oder hab ich da etwas übersehen?
Gibt es vll auch einen Unterschied zwischen BSD und SysV, den ich bisher übersehen hab? (Momentan scheint nur Solaris betroffen zu sein, bin da aber noch nicht ganz sicher)

Bin dankbar für jede Anregung...
 
Und auch diesesmal fällt es mir natürlich erst auf, nachdem ich es ins Forum geschrieben habe.

Der Hauptprozess blockt während dem Forken der Kindprozesse diverse Signal - auch TERM. Und dieses Verhalten übernehmen wiederum die Kindprozesse. *doh*
 
Zurück
Oben Unten