[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