The OpenNET Project / Index page

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

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

"while (waitpid (-1, &status1, WNOHANG)>0) и всеравно зомби"
Сообщение от void emailИскать по авторуВ закладки on 06-Фев-03, 19:17  (MSK)
Народ помогите я с сокетами и демонами вот только столкнулся и сразу грабли Остаются зомби процессы - вроде все по доке клеил но нифига waitpid не отлавливает
int main ()
{
  int serv_s,one = 1;
  struct sockaddr_in sin, cin;
  int cin_size = sizeof(cin);
  int sock, status1, child;

  daemon(0,0);

  serv_s = socket(PF_INET,SOCK_STREAM,0);
   .
   .
   .
  while ((sock = accept(serv_s,(struct sockaddr *)&cin, &cin_size)) >= 0)
    {
    .
    .
    .
    child = fork();
    if (child == -1)   panic("Can't fork");
    if (child == 0)
       {
        log_put("connect.log", "MAIN", "PID %d",getpid());
        if((one=proceed_connection(sock))<0)  
             log_put("connect.log", "MAIN", "Terminated abnormally");
        exit(0);
       }
     while ( (my_pid = waitpid (-1, &status1, WNOHANG))>0);
     close(sock);

    }

  panic("accept failed !!!");
  return 0;
}
Почему остаются зомби?
Я понимаю что у меня ошибка на уровне DNK:)

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

 Оглавление

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

1. "RE: while (waitpid (-1, &status1, WNOHANG)>0) и всеравно зом..."
Сообщение от romanSA Искать по авторуВ закладки on 07-Фев-03, 10:12  (MSK)
>Народ помогите я с сокетами и демонами вот только столкнулся и сразу
>грабли Остаются зомби процессы - вроде все по доке клеил но
>нифига waitpid не отлавливает

А что за ошибку возвращает waitpid()?
И почему не хочешь сделать обработку смерти child-ов через перехват сигнала SIGCHLD?
IMHO, это самый правильный способ.

P.S. Тут на форуме недавно поднимали этот вопрос.

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

2. "RE: while (waitpid (-1, &status1, WNOHANG)>0) и всеравно зом..."
Сообщение от void emailИскать по авторуВ закладки on 07-Фев-03, 12:07  (MSK)
Спасибо:)!
Все заработало зомбей нет:)!
Да я видел этот топик в форуме на который ты ссылался но я не разобрался в нем( видать сказалась 20 часовая борьба с этим)
А ларчик просто открывался ( поясняю мне нужно было при !!!любом!!! исходе child'a валить его)

void fsignal(int sig)
{
                exit(0);
}

int main ()
{
  int serv_s,one = 1;
  struct sockaddr_in sin, cin;
  int cin_size = sizeof(cin);
  int sock, status1, child,j;
  daemon(0,0);

  serv_s = socket(PF_INET,SOCK_STREAM,0);
  setsockopt(serv_s,SOL_SOCKET,SO_REUSEADDR,&one,sizeof(one));
  .
  .
  .
  while ((sock = accept(serv_s,(struct sockaddr *)&cin, &cin_size)) >= 0)
    {
     .
     .
     .
    for(j=1; j<32; j++)   signal(j,fsignal);
    child = fork();
    if (child == -1)   panic("Can't fork");
    else
    if (child == 0)
       {
        if((one=proceed_connection(sock))<0)  log_put("connect.log", "MAIN", "Terminated abnormally");
        return 0;
       }
    else
      {
      while (  waitpid (-1, &status1, WNOHANG)>0);
      }
.
.
.
.
.
спасибо всем за информацию!!!!!!!!!

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


Удалить

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




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

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