<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content="text/html; charset=iso-8859-2" http-equiv=Content-Type>
<META content="MSHTML 5.00.2614.3500" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT face="Arial CE" size=2></FONT> </DIV>
<DIV><FONT face="Arial CE" size=2>Vazeny kolegovia!</FONT></DIV>
<DIV><FONT face="Arial CE" size=2></FONT> </DIV>
<DIV><FONT face="Arial CE" size=2>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 </FONT><FONT
face="Arial CE" size=2>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....</FONT></DIV>
<DIV><FONT face="Arial CE" size=2>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....</FONT></DIV>
<DIV> </DIV>
<DIV><FONT face="Arial CE" size=2>S vdakou </FONT></DIV>
<DIV><FONT face="Arial CE" size=2></FONT> </DIV>
<DIV><FONT face="Arial CE" size=2>Peter Fodrek</FONT></DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV><FONT face="Arial CE" size=2>long ukoncenych=0,uspesnych;</FONT></DIV>
<DIV> </DIV>
<DIV><FONT face="Arial CE" size=2>/*<BR> obsluzna rutina SIGCHLD
<BR> */<BR>void ukoncil(int sig)<BR>{<BR> int
statlog;<BR> sigset_t in,out;<BR>
wait(&statlog);<BR> ukoncenych++;<BR>
if(WIFEXITED(statlog))<BR>
{<BR> uspesnych++;<BR> }<BR>
<BR> <BR>//
sigfillset(&in);<BR>//
sigprocmask(SIG_UNBLOCK,&in,&out);<BR>}</FONT></DIV>
<DIV> </DIV>
<DIV><FONT face="Arial CE" size=2></FONT> </DIV>
<DIV><FONT face="Arial CE" size=2>.........</FONT></DIV>
<DIV> </DIV>
<DIV><FONT face="Arial CE" size=2> ukoncenych=0;</FONT></DIV>
<DIV><FONT face="Arial CE" size=2> uspesnych=0;</FONT></DIV>
<DIV><FONT face="Arial CE" size=2> struct sigaction
act;<BR>//
signal(SIGCHLD,ukoncil);<BR>act.sa_handler=ukoncil;<BR>//
sigemtyset(&act.sa_mask);<BR>sigfillset(&act.sa_mask);<BR>act.sa_flags=SA_RESTART;<BR>sigaction(SIGCHLD,&act,NULL);</FONT></DIV>
<DIV><FONT face="Arial CE" size=2>//sigpending(&act.sa_mask);</FONT></DIV>
<DIV><FONT face="Arial CE" size=2>.............................</FONT></DIV>
<DIV><FONT face="Arial CE" size=2>do{</FONT></DIV>
<DIV><FONT face="Arial CE" size=2>do{</FONT></DIV>
<DIV><FONT face="Arial CE" size=2>pid=fork();</FONT></DIV>
<DIV><FONT face="Arial CE" size=2>usleep(100000);</FONT></DIV>
<DIV><FONT face="Arial CE" size=2>}while(pid==-1);</FONT></DIV>
<DIV><FONT face="Arial CE" size=2>if(pid==0)</FONT></DIV>
<DIV><FONT face="Arial CE" size=2>{</FONT></DIV>
<DIV><FONT face="Arial CE" size=2>.....</FONT></DIV>
<DIV><FONT face="Arial CE" size=2>exit(0);</FONT></DIV>
<DIV><FONT face="Arial CE" size=2>}</FONT></DIV>
<DIV><FONT face="Arial CE" size=2>spustenych++;</FONT></DIV>
<DIV> </DIV>
<DIV><FONT face="Arial CE" size=2>}while(......)</FONT></DIV>
<DIV> </DIV>
<DIV><FONT face="Arial CE" size=2>
<DIV><FONT face="Arial CE"
size=2>.............................</FONT></DIV></FONT></DIV>
<DIV><FONT face="Arial CE" size=2>while(ukoncenych!=spustenych)</FONT></DIV>
<DIV><FONT face="Arial CE" size=2>{</FONT></DIV>
<DIV><FONT face="Arial CE" size=2>
usleep(100000);</FONT></DIV>
<DIV><FONT face="Arial CE" size=2> printf("blabala %ld/%ld\t
blabala%ld",ukoncenych,spustenych,uspesnych);</FONT></DIV>
<DIV><FONT face="Arial CE" size=2>}</FONT></DIV>
<DIV> </DIV>
<DIV><FONT face="Arial CE" size=2></FONT> </DIV>
<DIV><FONT face="Arial CE" size=2><BR> </DIV></FONT></BODY></HTML>