Вот проблема:
У меня есть демон, который получает запросы от клиента, выполняет функцию (из некоторого модуля) из-за запроса и возвращает ответ клиенту.
После форка () я закрываю STDIN, STDOUT и STDERR.
Одной из функций является проверка dmesg. Для этого я получаю вывод dmesg через
открыть (DMESG, "/ bin / dmesg |"). Я не закрываю этот fh после чтения из него, потому что я думал, что он закроется автоматически после завершения функции.
Но этого не происходит, и я получаю зомби за каждый вызов dmesg.
Вкл. Как я могу заново инициализировать Perl STDIN / STDOUT / STDERR? Я обнаружил, что «проблема с закрытием STDOUT вместо повторного открытия заключается в том, что если вы откроете другие файлы, они могут получить fd 0,1 или 2 - мешает вам снова открыть STDOUT в будущем. " от jmanning2k
И я думаю, что это как-то связано с этим, но я не совсем понимаю. Я надеюсь, что кто-то сможет мне это объяснить.
Я знаю, что могу избежать проблемы, например, вызывая dmesg через qx (); или просто закрытие fh, но я хочу понять, откуда появляются зомби.