Написал прогу на C, которая вешается на порт и ждет запросы клиентов. Для каждого нового соединения создается дочерний подпроцесс с помощью fork. Все вроде работает нормально, но после разрыва соединения, если запустить ps, то видно, что эти дочерние процессы переходят в состояние "зомби" и завершают свою работу только по kill'у.
Если кто сталкивался с подобной ситуацией, просьба прояснить! Заранее всем спасибо!
>Написал прогу на C, которая вешается на порт и ждет запросы клиентов.
>Для каждого нового соединения создается дочерний подпроцесс с помощью fork. Все
>вроде работает нормально, но после разрыва соединения, если запустить ps, то
>видно, что эти дочерние процессы переходят в состояние "зомби" и завершают
>свою работу только по kill'у.
>Если кто сталкивался с подобной ситуацией, просьба прояснить! Заранее всем спасибо!Дочерний процесс, после завершения, обязан переходить в состояние "зомби", ожидая обработки системным вызовом wait(), при этом родительскому процессу посылается сигнал SIG_CHLD. Таким образом есть 2 варианта - либо в родительском процессе повесить обработчик на SIG_CHLD, который будет щелкать wait'ом (не самый лучший вариант, связан с тонкостями сигнального механизма), либо (что более надежно) в каком нибудь, достаточно часто вызываемом месте родительского процесса сделать "сборку мусора для зомбей" приблизительно такого типа: while ( waitpid(-1, NULL, WNOHANG) > 0 ); т.е. пока есть дочерние процессы в состоянии "зомби", обрабатывать их в асинхронном режиме, без сохранения статуса.
Это достаточно типовая задача в POSIX-программировании, посему советую дополнительно почитать маны и буквари.
>
>Это достаточно типовая задача в POSIX-программировании, посему советую дополнительно почитать маны и
>буквари.Может, дашь ссылки на хорошие буквари по POSIX
Заранее спасибо
>
>>
>>Это достаточно типовая задача в POSIX-программировании, посему советую дополнительно почитать маны и
>>буквари.
>
>Может, дашь ссылки на хорошие буквари по POSIX
>Заранее спасибоhttp://www.opengroup.org/onlinepubs/009695399/
// wbr