>Вот примерный код:
>Основной процесс, создающий дочерние процессы:
>switch (fork())
> {
> case 0:
>
>close(SSocket);
>
>SomeFunc(CSocket, inet_ntoa(clnt_addr.sin_addr));
>
>close(CSocket);
>
>exit(0);
>
>break;
> case -1:
>
>break;
> default:
>
>close(CSocket);
>
>break;
> }
Из этого фрагмента не очень понятно: вот это дело, которое выше, если в цикле то поподробнее как оно делается. Согласно этому коду, дитенок запускает SomeFunc, а где обещанная задержка в 30 сек? Она ведь должна в паренте выставляться, а не в дите.
Вообщем очередной раз убедился, что в чужих прогах разбираться...
Ниже мой пример. Дети завершаются с разницей в 5 сек.
//--- chldtest.c
#include <unistd.h>
#include <sys/time.h>
void do_child(int no) {
struct timeval tv;
tv.tv_sec=8;
tv.tv_usec=0;
select(0,(fd_set *)0, (fd_set *)0, (fd_set *)0, &tv);
printf("child %i finished!\n",no);
}
main() {
if (fork()==0) {
do_child(1);
return 0;
}
sleep(5);
if (fork()==0) {
do_child(2);
return 0;
}
while (waitpid(-1,0,0)>=0) usleep(100);
puts("All children finished.Press ENTER");
getchar();
}