ich hab hier ein Problem, bei dem ich einfach nicht weiterkomme. Ich habe einen Server, der sich mittels des folgenden Codes komplett vom Elternprozeß abtrennt, um als Daemon zu laufen:
use POSIX "setsid"; sub daemonize { chdir("/") || die "can't chdir to /: $!"; open(STDIN, "< /dev/null") || die "can't read /dev/null: $!"; open(STDOUT, "> /dev/null") || die "can't write to /dev/null: $!"; defined(my $pid = fork()) || die "can't fork: $!"; exit if $pid; # non-zero now means I am the parent (setsid() != -1) || die "Can't start a new session: $!" open(STDERR, ">&STDOUT") || die "can't dup stdout: $!"; }Quelle: perldoc
Die Abtrennung ist auch das Problem, weil somit keine Kommunikation mehr möglich ist. Es können in der Startphase nämlich noch Fehler auftreten, die den Daemon beenden. Davon kriegt der Elternprozeß aber nichts mit, weil der Daemon in seinem eigenen Kontext läuft.
Wie kriege ich es hin, im Elternprozeß zu überprüfen, ob der Daemon nach 3 Sekunden noch läuft? Ich kenne ja nicht mal die PID des Daemons. setsid() gibt nur die eigene PID zurück. Zur Not könnte ich das über eine Datei machen, aber vielleicht kennt ja jemand eine elegantere Möglichkeit?