<!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> </DIV>
<DIV> </DIV>
<DIV><FONT face="Arial CE" size=2><FONT face="Arial CE" size=2>Vazeny LINUX
wizards!</FONT></FONT></DIV>
<DIV> </DIV>
<DIV> </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> </DIV>
<DIV><FONT face="arial CE" size=2>Zistil som to tak, ze som pred
<DIV><FONT face="Arial CE" size=2></FONT> </DIV>
<DIV><FONT face="Arial CE"
size=2>while(ukoncenych!=spustenych)</FONT></DIV></FONT></DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV><FONT face="Arial CE" size=2>dal kod </FONT></DIV>
<DIV> </DIV>
<DIV><FONT face="Arial CE"
size=2>for(i=0;i<spustenych;i++)<BR>{<BR>wait(&statlog);<BR>printf("Ukoncenych:%ld/%ld\n",ukoncenych,spustenych);<BR>}<BR>ukoncenych=spustenych;</FONT> </DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV><FONT face="Arial CE" size=2>a 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> </DIV>
<DIV> </DIV>
<DIV><FONT face="arial CE" size=2>aj po tejto zmene program "stuhol" na
wait(&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 PID_rodica sa znova
rozbehol. Tentoraz vsak bolo menej printf-ov ale prijatych signalov 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> </DIV>
<DIV> </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> </DIV>
<DIV><FONT face="Arial CE" size=2>S vdakou za rychlu/nejaku odpoved a
pozdravom</FONT></DIV>
<DIV> </DIV>
<DIV><FONT face="arial CE" size=2>Peter Fodrek</FONT></DIV>
<DIV> </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> </DIV>
<DIV><FONT face="Arial CE" size=2>Vazeny LINUX wizards!</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>