Portál AbcLinuxu, 27. dubna 2024 03:17


Dotaz: Visici procesy

19.2.2009 18:55 BladeRunner123
Visici procesy
Přečteno: 295×
Odpovědět | Admin

Zdravim, naprogramoval jsem si daemona, ktery ceka na urcitem portu a pokud se k nemu nekdo pripoji, preda mu shell (pres excve()). Pokud se uzivatel z terminalu odhlasi (Ctrl+D nebo exit), tak stale v pstree vidim, ze muj daemon ma potomka bash. Kdyz se tam pak postupne pripji 5 uzivatelu a odhlasi se, vidim v pstree stale ze daemon ma 5 potomku bash. Proc tam prosim zustavaji viset ty bash procesy?

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

19.2.2009 19:07 maleprase | skóre: 28
Rozbalit Rozbalit vše Re: Visici procesy
Odpovědět | | Sbalit | Link | Blokovat | Admin
proces ktery skonci se stava zombii do te doby nez si jeho rodicovsky proces nevyzvedne informace o jeho ukonceni volanim wait() nebo waitpid(). vice v man 2 wait
19.2.2009 22:11 BladeRunner123
Rozbalit Rozbalit vše Re: Visici procesy

Ok, pridal jsem tedy za fork() vetev

if (pid > 0)
	wait(&status);

S tim to funguje vyborne pro jednoho klienta. Hned jak se odpoji, potomek bash zmizi. Pokud je vsak klient pripojen a chce se pripojit dalsi klient, tak ten nedostane shell - asi proto, ze rodic je zaseknuty ve wait a ceka az prvni klient ukonci svou praci. Jak by slo toto vyresit?

19.2.2009 22:53 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
Rozbalit Rozbalit vše Re: Visici procesy
Tenhle kód likviduje všechny visící procesy (dokud nějaké jsou).
while (waitpid(-1, &status, WNOHANG) != -1);
I am always ready to learn although I do not always like to be taught. (W. Churchill)
19.2.2009 23:00 BladeRunner123
Rozbalit Rozbalit vše Re: Visici procesy

To sice ano, ale kam presne ho do daemona navrhujete umistit?

19.2.2009 23:24 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
Rozbalit Rozbalit vše Re: Visici procesy
Já bych ho umístil třeba před ten exec - aby se před spuštěním nového procesu trochu uklidilo. Pokud by to bylo potřeba čistit pravidelně (třeba každých 15 vteřin), tak bych to asi umístil za accept a z toho acceptu to probouzel přes SIGALRM (pokud to neprobudí připojení klienta).
I am always ready to learn although I do not always like to be taught. (W. Churchill)
20.2.2009 00:55 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: Visici procesy
Pripadne moze rodicovksy proces nastavit, ze o informacie o mrtvych detoch nestoji a zombie rovno same zanikaju. Signalu SIGCHLD nastavit ignore.
If you hold a Unix shell up to your ear, you can you hear the C.
25.2.2009 14:57 BladeRunner123
Rozbalit Rozbalit vše Re: Visici procesy

Jak mohu nastavit, aby zombie rovnou zanikaly?

25.2.2009 18:47 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: Visici procesy
signal(SIGCHLD, SIG_IGN );
If you hold a Unix shell up to your ear, you can you hear the C.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.