The OpenNET Project / Index page

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

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

"Проверка состояния дочернего процесса"
Сообщение от flyer emailИскать по авторуВ закладки on 29-Сен-03, 15:47  (MSK)
Необходимо проверять состояние дочернего процесса созданого функцией fork(). Использование waitpid() не подходит, так как нельзя блокировать отцовский процесс (он должен в это время выполнять считывание). Кто-нибудь знает, как узнать выполняется ли дочерний процесс или уже завершился?
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

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

1. "Проверка состояния дочернего процесса"
Сообщение от flyer emailИскать по авторуВ закладки on 29-Сен-03, 16:57  (MSK)
Oops! Не обратил внимание что в waitpid параметр options можно выставить WNOHANG, и тогда статус дочернего процесса возвращается немедленно.

>Необходимо проверять состояние дочернего процесса созданого функцией fork(). Использование waitpid() не подходит,
>так как нельзя блокировать отцовский процесс (он должен в это время
>выполнять считывание). Кто-нибудь знает, как узнать выполняется ли дочерний процесс или
>уже завершился?


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

2. "Проверка состояния дочернего процесса"
Сообщение от muxamop emailИскать по авторуВ закладки on 02-Окт-03, 14:28  (MSK)
>Необходимо проверять состояние дочернего процесса созданого функцией fork(). Использование waitpid() не подходит,
>так как нельзя блокировать отцовский процесс (он должен в это время
>выполнять считывание). Кто-нибудь знает, как узнать выполняется ли дочерний процесс или
>уже завершился?
кароче используй wait3
пример создает несколько процессов и если какойто заканчивается то его перезапускают
  pids = (int*)calloc(config.srv_count + 1,sizeof (int));
  for(i = 0; i < config.srv_count; i++){
     pids[i] = fork();
     if(!pids[i]){
      flow_capture(i);
      exit(0);
     }
     if(pids[i] < 0){
       perror("Can't fork");
       continue;
     }
     ++pid_count;
     printf("Pid (%s - %s:%d  serv_conf_id = %d) - %d\n",config.srv[i].name,config.srv[i].ip,config.srv[i].port,config.srv[i].serv_conf_id,pids[i]);
  }

  while (!need_to_stop) {
    child_pid = wait3(&child_status,WUNTRACED,NULL);


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


Удалить

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




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

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