Народ помогите я с сокетами и демонами вот только столкнулся и сразу грабли Остаются зомби процессы - вроде все по доке клеил но нифига waitpid не отлавливает
int main ()
{
int serv_s,one = 1;
struct sockaddr_in sin, cin;
int cin_size = sizeof(cin);
int sock, status1, child;
daemon(0,0);serv_s = socket(PF_INET,SOCK_STREAM,0);
.
.
.
while ((sock = accept(serv_s,(struct sockaddr *)&cin, &cin_size)) >= 0)
{
.
.
.
child = fork();
if (child == -1) panic("Can't fork");
if (child == 0)
{
log_put("connect.log", "MAIN", "PID %d",getpid());
if((one=proceed_connection(sock))<0)
log_put("connect.log", "MAIN", "Terminated abnormally");
exit(0);
}
while ( (my_pid = waitpid (-1, &status1, WNOHANG))>0);
close(sock);}
panic("accept failed !!!");
return 0;
}
Почему остаются зомби?
Я понимаю что у меня ошибка на уровне DNK:)
>Народ помогите я с сокетами и демонами вот только столкнулся и сразу
>грабли Остаются зомби процессы - вроде все по доке клеил но
>нифига waitpid не отлавливаетА что за ошибку возвращает waitpid()?
И почему не хочешь сделать обработку смерти child-ов через перехват сигнала SIGCHLD?
IMHO, это самый правильный способ.P.S. Тут на форуме недавно поднимали этот вопрос.
Спасибо:)!
Все заработало зомбей нет:)!
Да я видел этот топик в форуме на который ты ссылался но я не разобрался в нем( видать сказалась 20 часовая борьба с этим)
А ларчик просто открывался ( поясняю мне нужно было при !!!любом!!! исходе child'a валить его)void fsignal(int sig)
{
exit(0);
}int main ()
{
int serv_s,one = 1;
struct sockaddr_in sin, cin;
int cin_size = sizeof(cin);
int sock, status1, child,j;
daemon(0,0);serv_s = socket(PF_INET,SOCK_STREAM,0);
setsockopt(serv_s,SOL_SOCKET,SO_REUSEADDR,&one,sizeof(one));
.
.
.
while ((sock = accept(serv_s,(struct sockaddr *)&cin, &cin_size)) >= 0)
{
.
.
.
for(j=1; j<32; j++) signal(j,fsignal);
child = fork();
if (child == -1) panic("Can't fork");
else
if (child == 0)
{
if((one=proceed_connection(sock))<0) log_put("connect.log", "MAIN", "Terminated abnormally");
return 0;
}
else
{
while ( waitpid (-1, &status1, WNOHANG)>0);
}
.
.
.
.
.
спасибо всем за информацию!!!!!!!!!