>Необходимо проверять состояние дочернего процесса созданого функцией 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);
|