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

Исходное сообщение
"Проверка состояния дочернего процесса"

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

Содержание

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

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



"Проверка состояния дочернего процесса"
Отправлено muxamop , 02-Окт-03 14:28 
>Необходимо проверять состояние дочернего процесса созданого функцией 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);