<!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>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face="Arial CE" size=2><FONT face="Arial CE" size=2>Vazeny LINUX 
wizards!</FONT></FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face="arial CE" size=2>Uz som zistil pricinu chybneho pocitania... 
rodic nedostal SIGCHLD alebo nebol tento ignorovany ale ani zaradeny medzi 
pending signals..</FONT></DIV>
<DIV><FONT face="arial CE" size=2></FONT>&nbsp;</DIV>
<DIV><FONT face="arial CE" size=2>Zistil som to tak, ze som pred 
<DIV><FONT face="Arial CE" size=2></FONT>&nbsp;</DIV>
<DIV><FONT face="Arial CE" 
size=2>while(ukoncenych!=spustenych)</FONT></DIV></FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face="Arial CE" size=2>dal kod </FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face="Arial CE" 
size=2>for(i=0;i&lt;spustenych;i++)<BR>{<BR>wait(&amp;statlog);<BR>printf("Ukoncenych:%ld/%ld\n",ukoncenych,spustenych);<BR>}<BR>ukoncenych=spustenych;</FONT>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face="Arial CE" size=2>a&nbsp; vo void ukoncil(int 
sig)<BR></FONT></DIV>
<DIV><FONT size=2><FONT face="Arial CE">som vyhodil riadok s volanim  
wait</FONT></FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face="arial CE" size=2>aj po tejto zmene&nbsp;program "stuhol" na 
wait(&amp;statlog) pri 105 procesoch z ktorych bolo 80 zombie...(program ma 165 
procesov)</FONT></DIV>
<DIV><FONT face="arial CE" size=2>no po kill -9&nbsp; PID_rodica sa znova 
rozbehol. Tentoraz vsak bolo menej printf-ov ale prijatych signalov&nbsp;bolo 
46-58 (ostatne udaje pre 58 ale aj tak chyba 1 proces 58+105=163+1rodic=164 
procesov namiesto 165, cize jeden niekde viazne- mozno sa len system nevratil z 
volania wait, ktore uspesne zrealizoval) v zavislosti od toho co bobim na inych 
konzolach ps |egrep nazov_prg|egrep zombie|wc -l alebo ps |egrep nazov_prg|wc 
-l, ci nieco podobne</FONT></DIV>
<DIV><FONT face="arial CE" size=2>a ako casto to robim, pripadne od pouzitia ci 
nepouzitia nice v programe (prg bezi pod oboma uid root).</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face="Arial CE" size=2>Uz skutocne netusim ako je to mozne.. kernel 
musim mat 2.0.3x koli dvom priemyselnym kartam...</FONT></DIV>
<DIV><FONT face="arial CE" size=2>Neexistuje nahodou nejake nastavenie 
maximalneho poctu pending signalov? </FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face="Arial CE" size=2>S vdakou za rychlu/nejaku odpoved a 
pozdravom</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face="arial CE" size=2>Peter Fodrek</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV style="FONT: 10pt arial CE">----- Original Message ----- 
<DIV style="BACKGROUND: #e4e4e4; font-color: black"><B>From:</B> <A 
href="mailto:fodrek@kasr.elf.stuba.sk" title=fodrek@kasr.elf.stuba.sk>peter 
Fodrek</A> </DIV>
<DIV><B>To:</B> <A href="mailto:linux@lists.linux.sk" 
title=linux@lists.linux.sk>linux@lists.linux.sk</A> </DIV>
<DIV><B>Sent:</B> Thursday, June 20, 2002 11:11 AM </DIV>
<DIV><B>Subject:</B> [linux] Pocitanie SIGCHLD a vytvaranie "zombiekov" a teda 
neprijatie vsetkych SIGCHLD.PLS HLP</DIV></DIV>
<DIV><BR></DIV>
<DIV><FONT face="Arial CE" size=2></FONT>&nbsp;</DIV>
<DIV><FONT face="Arial CE" size=2>Vazeny LINUX wizards!</FONT></DIV>
<DIV><FONT face="Arial CE" size=2></FONT>&nbsp;</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&nbsp;tato cinnost isla na Solaris-e... Problem vznika vtedy 
ak&nbsp;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&nbsp; 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&nbsp; 
neskoncia ani za 15&nbsp; 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>&nbsp;</DIV>
<DIV><FONT face="Arial CE" size=2>S vdakou </FONT></DIV>
<DIV><FONT face="Arial CE" size=2></FONT>&nbsp;</DIV>
<DIV><FONT face="Arial CE" size=2>Peter Fodrek</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face="Arial CE" size=2>long ukoncenych=0,uspesnych;</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face="Arial CE" size=2>/*<BR>&nbsp;obsluzna rutina SIGCHLD 
<BR>&nbsp;*/<BR>void ukoncil(int sig)<BR>{<BR>&nbsp;&nbsp;&nbsp; int 
statlog;<BR>&nbsp;&nbsp;&nbsp; sigset_t in,out;<BR>&nbsp;&nbsp;&nbsp; 
wait(&amp;statlog);<BR>&nbsp;&nbsp;&nbsp; ukoncenych++;<BR>&nbsp;&nbsp;&nbsp; 
if(WIFEXITED(statlog))<BR>&nbsp;&nbsp;&nbsp; 
{<BR>&nbsp;uspesnych++;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; 
<BR>&nbsp;&nbsp;&nbsp; <BR>//&nbsp;&nbsp;&nbsp; 
sigfillset(&amp;in);<BR>//&nbsp;&nbsp;&nbsp; 
sigprocmask(SIG_UNBLOCK,&amp;in,&amp;out);<BR>}</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face="Arial CE" size=2></FONT>&nbsp;</DIV>
<DIV><FONT face="Arial CE" size=2>.........</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face="Arial CE" size=2>&nbsp;ukoncenych=0;</FONT></DIV>
<DIV><FONT face="Arial CE" size=2>&nbsp;uspesnych=0;</FONT></DIV>
<DIV><FONT face="Arial CE" size=2>&nbsp;&nbsp; struct sigaction 
act;<BR>//&nbsp;&nbsp;&nbsp; 
signal(SIGCHLD,ukoncil);<BR>act.sa_handler=ukoncil;<BR>// 
sigemtyset(&amp;act.sa_mask);<BR>sigfillset(&amp;act.sa_mask);<BR>act.sa_flags=SA_RESTART;<BR>sigaction(SIGCHLD,&amp;act,NULL);</FONT></DIV>
<DIV><FONT face="Arial CE" size=2>//sigpending(&amp;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>&nbsp;</DIV>
<DIV><FONT face="Arial CE" size=2>}while(......)</FONT></DIV>
<DIV>&nbsp;</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>&nbsp;&nbsp;&nbsp; 
usleep(100000);</FONT></DIV>
<DIV><FONT face="Arial CE" size=2>&nbsp;&nbsp;&nbsp; printf("blabala %ld/%ld\t 
blabala%ld",ukoncenych,spustenych,uspesnych);</FONT></DIV>
<DIV><FONT face="Arial CE" size=2>}</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face="Arial CE" size=2></FONT>&nbsp;</DIV>
<DIV><FONT face="Arial CE" size=2><BR>&nbsp;</DIV></FONT></BODY></HTML>