URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 3525
[ Назад ]

Исходное сообщение
"Проясните ситуацию плиз!"

Отправлено Alex Polski , 27-Окт-04 19:11 
Написал прогу на C, которая вешается на порт и ждет запросы клиентов. Для каждого нового соединения создается дочерний подпроцесс с помощью fork. Все вроде работает нормально, но после разрыва соединения, если запустить ps, то видно, что эти дочерние процессы переходят в состояние "зомби" и завершают свою работу только по kill'у.
Если кто сталкивался с подобной ситуацией, просьба прояснить! Заранее всем спасибо!

Содержание

Сообщения в этом обсуждении
"Проясните ситуацию плиз!"
Отправлено Alexander S. Salieff , 27-Окт-04 19:35 
>Написал прогу на C, которая вешается на порт и ждет запросы клиентов.
>Для каждого нового соединения создается дочерний подпроцесс с помощью fork. Все
>вроде работает нормально, но после разрыва соединения, если запустить ps, то
>видно, что эти дочерние процессы переходят в состояние "зомби" и завершают
>свою работу только по kill'у.
>Если кто сталкивался с подобной ситуацией, просьба прояснить! Заранее всем спасибо!

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

Это достаточно типовая задача в POSIX-программировании, посему советую дополнительно почитать маны и буквари.


"Проясните ситуацию плиз!"
Отправлено Pablo , 28-Окт-04 10:41 

>
>Это достаточно типовая задача в POSIX-программировании, посему советую дополнительно почитать маны и
>буквари.

Может, дашь ссылки на хорошие буквари по POSIX
Заранее спасибо



"Проясните ситуацию плиз!"
Отправлено klalafuda , 28-Окт-04 11:19 
>
>>
>>Это достаточно типовая задача в POSIX-программировании, посему советую дополнительно почитать маны и
>>буквари.
>
>Может, дашь ссылки на хорошие буквари по POSIX
>Заранее спасибо

http://www.opengroup.org/onlinepubs/009695399/

// wbr