The OpenNET Project / Index page

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

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

"процесс в фоновый режим"
Сообщение от aagr Искать по авторуВ закладки on 19-Окт-03, 12:04  (MSK)
смотрел старый тред насчет сабжа.

там посоветовали сделать так:
1. процесс делает fork и ждет завершения
2. ребенок делает fork и завершается
3. внук делает exec

вот как я это реализовал. почему-то процессы сваливаются в зомби, хотя автор утверждал что этого не будет. где я туплю?

ps -ax | grep Z

0 v1 ZW+ 0:00,00 (ls)


if ((rc = fork()) == -1) {
             perror("-ash-: fork");
             printf("-ash-# ");
          }
  
          if (rc) {          
                wait(&stat_loc);
             printf("-ash-# ");
          }
      
          else {
            
             if (amper_count > 0) {

if ((rc = fork()) == -1) {
           perror("-ash-: fork");
   printf("#");
        }
                        
// if (rc) {
//    wait(&stat_loc);
// }

else if (rc ==0) {
           execvp(arg[0],arg);
   perror("-ash-: exec");
   return 0;
}
     }  
    
     else {
        execvp(arg[0],arg);
        perror("-ash-: exec");
        return 0;
     }
    

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

 Оглавление

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

1. ">утверждал что этого не будет. где я туплю? "
Сообщение от Lamr emailИскать по авторуВ закладки on 19-Окт-03, 20:11  (MSK)
В ТОТ МОМЕНТ, КОГДА ВОПРОС ДЛЯ ПРОГРАММИСТОВ ВЫВАЛИВАЕШЬ НА ОБЩИЙ ФОРУМ
тебе надо
http://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi?az=list&forum=vsluhforumID9&conf=misc
Ж-)))
  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "процесс в фоновый режим"
Сообщение от Дмитрий emailИскать по авторуВ закладки on 20-Окт-03, 12:34  (MSK)
>смотрел старый тред насчет сабжа.
>
>там посоветовали сделать так:
>1. процесс делает fork и ждет завершения
>2. ребенок делает fork и завершается
>3. внук делает exec
>
>вот как я это реализовал. почему-то процессы сваливаются в зомби, хотя автор
>утверждал что этого не будет. где я туплю?
>
>ps -ax | grep Z
>
>0 v1 ZW+ 0:00,00 (ls)
>
>
> if ((rc = fork()) == -1) {
>            
>  perror("-ash-: fork");
>            
>  printf("-ash-# ");
>           }
>
>
>           if
>(rc) {
>            
>     wait(&stat_loc);
>            
>  printf("-ash-# ");
>           }
>
>
>           else
>{
>
>              if (amper_count > 0) {
>
>   if ((rc = fork()) == -1) {
>            
> perror("-ash-: fork");
>      printf("#");
>          }
>
>  // if (rc) {
>  //    wait(&stat_loc);
>  // }
>
>   else if (rc ==0) {
>            
> execvp(arg[0],arg);
>      perror("-ash-: exec");
>      return 0;
>   }
>       }
>
>       else {
>          execvp(arg[0],arg);
>          perror("-ash-: exec");
>
>          return 0;
>
>       }
>


Процесс превращается в зомби, когда родитель не завершился, а ребенок завершился, причем родитель не дождался его завершения. Если родитель завершается, а ребенок - нет, то его (ребенка) подбирает init и никакого зомби не возникает. Видимо, в твоей ситуации внука init не подбирает, потому что есть дед, внук завершается, но никто его wait'ом не ждет - вот и возникает зомби.

Удачи.


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

3. "процесс в фоновый режим"
Сообщение от Дмитрий emailИскать по авторуВ закладки on 20-Окт-03, 12:36  (MSK)
>смотрел старый тред насчет сабжа.
>
>там посоветовали сделать так:
>1. процесс делает fork и ждет завершения
>2. ребенок делает fork и завершается
>3. внук делает exec
>
>вот как я это реализовал. почему-то процессы сваливаются в зомби, хотя автор
>утверждал что этого не будет. где я туплю?
>
>ps -ax | grep Z
>
>0 v1 ZW+ 0:00,00 (ls)
>
>
> if ((rc = fork()) == -1) {
>            
>  perror("-ash-: fork");
>            
>  printf("-ash-# ");
>           }
>
>
>           if
>(rc) {
>            
>     wait(&stat_loc);
>            
>  printf("-ash-# ");
>           }
>
>
>           else
>{
>
>              if (amper_count > 0) {
>
>   if ((rc = fork()) == -1) {
>            
> perror("-ash-: fork");
>      printf("#");
>          }
>
>  // if (rc) {
>  //    wait(&stat_loc);
>  // }
>
>   else if (rc ==0) {
>            
> execvp(arg[0],arg);
>      perror("-ash-: exec");
>      return 0;
>   }
>       }
>
>       else {
>          execvp(arg[0],arg);
>          perror("-ash-: exec");
>
>          return 0;
>
>       }
>


Процесс превращается в зомби, когда родитель не завершился, а ребенок завершился, причем родитель не дождался его завершения. Если родитель завершается, а ребенок - нет, то его (ребенка) подбирает init и никакого зомби не возникает. Видимо, в твоей ситуации внука init не подбирает, потому что есть дед, внук завершается, но никто его wait'ом не ждет - вот и возникает зомби.

Удачи.

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


Удалить

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




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

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