Вот в чем проблема: У меня есть демон, который получает запросы от клиента, выполняет функцию (из некоторого модуля) из-за запроса и возвращает ответ на клиент. После того, как fork() закрою STDIN, STDOUT и STDERR. Одна функция - проверить dmesg. Для этого я получаю вывод dmesg через open (DMESG, "/ bin/dmesg |"). Я не закрываю этот fh после прочтения, потому что я думал, что он автоматически закрывается после завершения функции. Но этого не происходит, и я получаю зомби за каждый вызов dmesg.Perl: создание зомби через open() без закрытия()
How can I reinitialize Perl's STDIN/STDOUT/STDERR? Я обнаружил, что проблема с закрытием STDOUT вместо повторного открытия заключается в том, что если вы открываете другие файлы, они могут получить fd 0,1 или 2, что предотвратит повторное открытие STDOUT в будущем ». by jmanning2k И я думаю, что это как-то связано с этим, но я действительно не понимаю. Я надеюсь, что кто-то может объяснить это мне.
Я знаю, что могу избежать проблемы, например. вызывая dmesg через qx(); или просто закрывая fh, но я хочу понять, откуда берутся зомби.
Спасибо. thats это и thx для объяснения. – olo 2010-12-15 15:28:00