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