traced process, zombie => server jede blbe
Pavel Kankovsky
peak na argo.troja.mff.cuni.cz
Čtvrtek Únor 12 11:57:34 CET 2004
On 12 Feb 2004, Robert Vojta wrote:
> > Jakym zpusobem dam v threadu nebo ve forku child-procesu, ze
> > rodic-proces nevyzvedava navratovy kod??
Pro puvodniho tazatele: znam srozumitelnejsi zpusoby, jak formulovat
otazku.
> V diteti se to nenastavuje, dela to rodic ...
>
> a) bud nastavite, ze rodic ignoruje signal SIGCHLD, tj.
>
> b) nebo budete v handleru odchytavat signaly, ted tu nic nemam ale
> v rychlosti jsem vygoogloval priklad ...
Pro uplnost: nebo nechate SIGCHLD na SIG_DFL a wait() apod. zavolate pri
vhodne prilezitosti. Tohle se treba dela, kdyz je potomek spousten
synchronne: rodic udela fork() a pak wait() a proste si pocka, az
potomek skonci.
> void sig_chld(int signo)
> {
> int status, wpid, child_val;
>
> printf ("SIGCHLD: In sig_chld signal handler.");
Volat printf() v signal handleru neni dobry napad, protoze stdio neni
reentrantni. Signaly chodi asynchronne a staci, aby se jeden trefil do
okamziku, kdy prave probiha nejaka funkce ze stdio a vrta se v datech,
a bum!
Reentrantni je ostatne podle standardu jen velmi mala cast libc (a take
jen mala cast ostatniho kodu, co byl kdy napsan), cili obecne je zadouci
toho v signal handleru delat co nejmene.
--Pavel Kankovsky aka Peak [ Boycott Microsoft--http://www.vcnet.com/bms ]
"Resistance is futile. Open your source code and prepare for assimilation."
Další informace o konferenci Linux