Voici le problème: J'ai un démon qui reçoit des requêtes d'un client, exécute une fonction (à partir d'un module) en raison de la requête et renvoie une réponse à le client. Après la fourche() je ferme STDIN, STDOUT et STDERR. Une fonction consiste à vérifier dmesg. Pour cela, je reçois la sortie dmesg via open (DMESG, "/ bin/dmesg |"). Je ne ferme pas ce fh après en avoir lu, car je pensais qu'il se fermerait automatiquement après la fin de la fonction. Mais cela n'arrive pas et je reçois un zombie pour chaque appel de dmesg.Perl: créer des zombies via open() sans close()
Sur How can I reinitialize Perl's STDIN/STDOUT/STDERR? J'ai trouvé "Le problème avec la fermeture de STDOUT au lieu de la réouverture est que si vous ouvrez d'autres fichiers, ils peuvent obtenir fd 0,1 ou 2 - vous empêchant de rouvrir STDOUT dans le futur." par jmanning2k Et je pense que ça a quelque chose à voir avec ça mais je ne comprends pas vraiment. J'espère que quelqu'un peut me l'expliquer.
Je sais que je peux éviter le problème, par exemple. en appelant dmesg via qx(); ou simplement fermer le fh mais je veux comprendre d'où viennent les zombies.
Merci. C'est ça et merci pour l'explication. – olo