[python] Problem s forkujicim serverem a SIGTERM signalem

slush slush na slush.cz
Středa Prosinec 17 18:31:14 CET 2008


Dobry den,

vzhledem k tomu, ze zde uz padlo reseni (ktere sam pouzivam, protoze jsem se
jiz parkrat dostal do podobnych problemu), tak jen spekulace, proc se to
chova tak, jak se chova.

Predpokladam, ze funkce volana po zachyceni systemoveho signalu zajistuje
separatni vlakno, nikoliv hlavni vlakno programu (fce cleanup se zavola
nezavisle na tom,ve kterem stavu se hlavni vlakno nachazi). Podle
dokumentace k sys.exit() tato funkce pouze vyvola vyjimku SystemExit.
Zpracovani vyjimek se ale provadi pouze v ramci aktualniho vlakna, takze
tato vyjimka "neprobubla" do jinych vlaken (hlavniho) a aplikace se logicky
neukonci (pouze se ukonci aktualni vlakno). Predani jakehosi vnitrniho
signalu (interni promenna) hlavnimu vlaknu je tedy spravny a korektni
postup.

Marek

2008/12/17 Lumír Jasiok <lumir.jasiok na vsb.cz>

> Dobry den,
>
> potreboval bych poradit s nasledujicim problemem. Mam napsany jednoduchy
> forkujici TCP/IP server. Server jako takovy funguje, child procesy se
> vytvareji i ukoncuji korektne, jediny probleme mam s ukoncenim parent
> procesu v okamziku, kdy z (napriklad shellu) zavolam signal SIGTERM. Mam
> osetreno zachyceni signalu a funkci, ktera zajisti, ze se pocka na ukonceni
> vsech child procesu a pak by se mel ukoncit i parent proces pomoci
> sys.exit(0). To se ale nestane, parent proces (server) se neukonci, ale
> skoci do nadrazene while smycky a dale ceka na spojeni a je schopen
> obsluhovat prichozi spojeni. Relevantni kod:
>
------------- dal?í ?ást ---------------
HTML p?íloha byla odstran?na...
URL: <http://www.py.cz/pipermail/python/attachments/20081217/5267a029/attachment.htm>


Další informace o konferenci Python