Portál AbcLinuxu, 15. července 2025 08:34


Dotaz: zabiti detskych podprocesu pri padu procesu

11.7.2006 06:24 danfiala | skóre: 7
zabiti detskych podprocesu pri padu procesu
Přečteno: 106×
Odpovědět | Admin
Dobre rano, pokud mam program, ktery spousti podprocesy, je mozne, aby pri necekanem ukonceni hlavniho programu (prichod signalu, nektera funkce programu zavola exit), kdy nestihne obslouzit vsechna wait(...), byly ukonceny i jeho podprocesy, ktere jsou ne nutne ve stavu zombie?

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

Odpovědi

11.7.2006 08:39 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: zabiti detskych podprocesu pri padu procesu
Odpovědět | | Sbalit | Link | Blokovat | Admin
To zařídit nejde. Ať to uděláš jakkoli, tak například proti SIGKILL není obrany. Jádro prostě ten proces odstřelí a nedá mu šanci, aby cokoli udělal (žádný handler zde nemá smysl).
11.7.2006 09:25 danfiala | skóre: 7
Rozbalit Rozbalit vše Re: zabiti detskych podprocesu pri padu procesu
Ouvej, ja doufal, ze bude nekde nejaky flag a ten se nastavi a potom jadro odstreli i ty detske procesy. Neexistovala by nejaka moznost s process group? Ze by pri odstrelu group leadera jadro poslalo "rozumne" signaly i podprocesum? Ovsem nezavisle na tom, jestli skupina ma, nebo nema konzoly... Diky, :;DF
11.7.2006 10:02 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: zabiti detskych podprocesu pri padu procesu
Jestliže budou všechny procesy patřit do stejné process group, tak je možné jim všem poslat signál hromadně (pomocí volání kill() a záporného PIDu). Ale stále zůstává možnost poslat signál pouze jednomu, takže tudy cesta nevede.
Jediné, co mě napadá je udělat dva procesy (třeba parent a jeden z potomků), které se budou vzájemně hlídat pomocí dead locku (třeba přes FIFO). Když jeden chcípne, druhý se vzbudí a ihned pozabíjí celou skupinu.
11.7.2006 10:14 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: zabiti detskych podprocesu pri padu procesu
Ale jde to, stačí se s těma děckama spojit rourou a když děcka neobslouží SIGPIPE tak je to sejme. Jen pozor na to, že otec musí SIGPIPE obsloužit jinak ho jakékoliv spadnuvší děcko sejme.
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
11.7.2006 10:59 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: zabiti detskych podprocesu pri padu procesu
Děcka dostanou SIGPIPE pouze při pokusu o zápis do roury bez druhého konce. Znamená to tedy, že by musela něco periodicky zapisovat do roury a parent by to semtam přečetl?
11.7.2006 11:17 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: zabiti detskych podprocesu pri padu procesu
Nestačí. Signál SIGPIPE dostane pouze proces, který se pokusí něco zapsat do roury, kterou nemá nikdo otevřenou pro čtení. Takže potomek by musel do té roury periodicky něco zkoušet zapsat - ale pak už je možná jednodušší testovat rovnou existenci rodiče. Na druhou stranu se není potřeba bát o rodiče - ten bude mít otevřen pouze "čtecí" konec roury, takže on SIGPIPE po ukončení potomka nedostane.

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.