Hallo,
...Der "schnellere" Prozess killt jeweils den anderen und beendet sich dann: Der ElternProzess sendet das Kommando ($command + 0x0d 0x0a 0x00), empfängt die Antwort, killt den Timerprozess und beendet sich, der Timerprozess lauert auf das Ende von sleep und killt den Sender/Empfänger Prozess und beendet sich auch.
[...]
# Elternprozess killen
kill("KILL",$ParentId);
}
exit;
fork: ...The function returns the child pid to the parent process and 0 to the child process on success. If it fails, it returns the undefined value to the parent process and no child process is created. If you fork your child process, you'll hava to wait on their zombies when they die. See the wait function for more information....
Da Dein Problem sich stark nach einer racing condition anhört, würde ich das Beenden des parent-prozesses ihm sich selbst überlassen:
Elternprozess nicht killen
}
exit;
Hier sind wir wieder im parent-prozess
Hier passende wait-funktion einfügen
exit;
Der parent-prozess hat sich beendet
Ein zweiter möglicher Fehler:
$TimerPid = fork();
hier bist Du schon im child-prozess und $TimerPid ist die pid des childs, oder im Fehlerfall gleich 0, aber eben nicht undefined!
die "fork: $!" unless defined $TimerPid;
Dies macht daher wenig Sinn, denn $TimerPid ist eben immer defined.
Es ist länger her, daß ich in Perl geproggt habe, drum verzeihe mir wenn ich was übersehen habe, vielleicht konnte ich ja trotzdem helfen.
cu, ziegenmelker