[linux] Help needed:Nedorucenie SIGCHLD rodicovi alebo SIGCHLD nema pending: Pocitanie SIGCHLD a vytvaranie "zombiekov" a teda neprijatievsetkychSIGCHLD.PLS HLP
peter Fodrek
fodrek na kasr.elf.stuba.sk
Pondělí Červen 24 13:51:03 CEST 2002
----- Original Message -----
From: riki <phobie na host.sk>
To: <linux na lists.linux.sk>
Sent: Thursday, June 20, 2002 5:37 PM
Subject: Re: [linux] Help needed:Nedorucenie SIGCHLD rodicovi alebo
SIGCHLDnemapending: Pocitanie SIGCHLD a vytvaranie "zombiekov" a teda
neprijatievsetkychSIGCHLD.PLS HLP
>
>
> > Dakujem za nejaku odpoved... no sigueue() ani nepoznam...
>
> hehe no doslova nejaku :)
>
> > Potreboval by som pocitat prijatia SIGCHLD, ale mam problem. Urcite je
> > "debilny", lebo viem, ze toto urcite ide.. Pred cca. 5 rokmi mi tato
> > cinnost isla na Solaris-e... Problem vznika vtedy ak velmi blizko seba
> > na casovej osi skoncia dve a viac "deti". Potom Zacnu vznikat zombieci a
> > ja ich navyse neprecitam, ze skoncili, pricom "zombieci" blokuju resp.
> > spomaluju dalsie procesy - naraz mi ide aj 160 procesov (z toho asi 100
> > zombie) a po exite (kill -9 ... :)))) rodica skoncia vsetky procesy do
> > 5s, pricom pocas behu rodica neskoncia ani za 15 min....
> > Kedze viem, ze ide o nejake nastavenie pending a block masiek posielam
> > aj cast zdrojaku, mozno toniekomu pomoze pri identifikovani tejto chyby,
> > pretoze ja som sa asi zacyklil....
> > No napadla ma dalsia vec... Tie detske procesy tvoria a plnia datami
subory
> > (niektore aj 200-300MB velke a niektore zas 90KB a menej)a man 2,6GB
> > particiu (ja som to neistaloval je tam len root directory mouted
particia).
> > A v case problemov je urcite free 0 blokov (nemeral som to ale po uprave
> > takej ze rodic ma wait a wait nie je v obsluhe som sa pri
cinnosti138-140
> > procesu -od 120 tvoria niektore procesy tie maxi subory- som sa dostal
na 0
> > free blocks na root file systeme,kedye este mozno aj dalsie procesy, ked
> > bezali paralene, generovali velke subory, tak som sa mohol skor dostat
skor
> > na 0 free blocks), zeby to bola pricina....
>
> tak to urcite :)
Diki za radu, ale nie je to v tom...
Skusal som modifikaciu taku, ze je volnhych aj 1GB a nic.. to iste... Keby
vedel niekto poradit ako/akeC funkcie mam spustit aby to slo, pretoze je
tam fakt nejaky debilny problem.. Ako maju byt nastavene tie masky, problem
nastane ak skoncia viac ako dva child-y takmer naraz..
pre istotu este raz ten kod...
long ukoncenych=0,uspesnych;
/*
obsluzna rutina SIGCHLD
*/
void ukoncil(int sig)
{
int statlog;
sigset_t in,out;
wait(&statlog);
ukoncenych++;
if(WIFEXITED(statlog))
{
uspesnych++;
}
// sigfillset(&in);
// sigprocmask(SIG_UNBLOCK,&in,&out);
}
.........
ukoncenych=0;
uspesnych=0;
struct sigaction act;
// signal(SIGCHLD,ukoncil);
act.sa_handler=ukoncil;
// sigemtyset(&act.sa_mask);
sigfillset(&act.sa_mask);
act.sa_flags=SA_RESTART;
sigaction(SIGCHLD,&act,NULL);
//sigpending(&act.sa_mask);
.............................
do{
do{
pid=fork();
usleep(100000);
}while(pid==-1);
if(pid==0)
{
.....
exit(0);
}
spustenych++;
}while(......)
.............................
while(ukoncenych!=spustenych)
{
usleep(100000);
printf("blabala %ld/%ld\t blabala%ld",ukoncenych,spustenych,uspesnych);
}
Další informace o konferenci linux