Hier ist das Problem: Ich habe einen Daemon, der Anfragen von einem Client erhält, führt eine Funktion (aus irgendeinem Modul) aufgrund der Anfrage und gibt eine Antwort zurück der Kunde. Nach dem fork() schließe ich STDIN, STDOUT und STDERR. Eine Funktion ist dmesg zu überprüfen. Dafür bekomme ich die dmesg-Ausgabe über offen (DMESG, "/ bin/dmesg |"). Ich schließe dieses fh nicht, nachdem ich es gelesen habe, weil ich dachte, dass es automatisch schließen würde, nachdem die Funktion beendet ist. Aber das passiert nicht und ich bekomme einen Zombie für jeden Anruf von dmesg.Perl: creating Zombies durch open() ohne close()
Auf How can I reinitialize Perl's STDIN/STDOUT/STDERR? Ich fand "Das Problem mit dem Schließen von STDOUT anstelle von Wiedereröffnung ist, dass wenn Sie andere Dateien öffnen, sie fd 0,1 oder 2 erhalten - verhindert, dass Sie STDOUT in der Zukunft wieder öffnen." von jmanning2k Und ich denke, dass es etwas damit zu tun hat, aber ich verstehe es nicht wirklich. Ich hoffe, dass mir jemand das erklären kann.
Ich weiß, dass ich das Problem vermeiden kann, z. durch Aufruf von dmesg über qx(); oder einfach die fh schließen, aber ich möchte verstehen, woher die Zombies kommen.
Danke. das ist es und thx für die Erklärung. – olo