Portál AbcLinuxu, 12. května 2025 10:17
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?
wait()
nebo waitpid()
. vice v man 2 wait
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?
while (waitpid(-1, &status, WNOHANG) != -1);
To sice ano, ale kam presne ho do daemona navrhujete umistit?
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).
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.