Ключевые слова:freebsd, ipfw, traffic, (найти похожие документы)
From: void <redsa@ukrpost.net>
Newsgroups: openforum
Orig: https://www.opennet.ru/openforum/vsluhforumID9/1365.htmlSubject: [FreeBSD] работающий ipa.conf IP Accounting Daemon (IPA)
Тема: "while (waitpid (-1, &status1, WNOHANG)>0) и всеравно зомби"
Отправлено: void <redsa@ukrpost.net>, 06-Фев-03 19:17
Народ помогите я с сокетами и демонами вот только столкнулся и
сразу грабли Остаются зомби процессы - вроде все по доке клеил но
нифига 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:)
From: romanSA , 07-Фев-03 10:12
А что за ошибку возвращает waitpid()?
И почему не хочешь сделать обработку смерти child-ов через перехват
сигнала SIGCHLD?
IMHO, это самый правильный способ.
P.S. Тут на форуме недавно поднимали этот вопрос.
From: void , 07-Фев-03 10:12
Спасибо:)!
Все заработало зомбей нет:)!
Да я видел этот топик в форуме на который ты ссылался но я не
разобрался в нем( видать сказалась 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);
}
.
.