The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Проясните ситуацию плиз!"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

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

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

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

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

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

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Проясните ситуацию плиз!"
Сообщение от Pablo Искать по авторуВ закладки on 28-Окт-04, 10:41  (MSK)

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

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


  Рекомендовать в FAQ | Cообщить модератору | Наверх

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

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

// wbr

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру