Ignorovane SIGCHLD a problem s returncodem

M. Vancl mvancl na atlas.cz
Pondělí Srpen 13 22:23:47 CEST 2007


Zdravim vespolek !

Narazil jsem na problem s vyhodnocenim navratoveho kodu a nevik kudy dal. Konkretne: 
Z freeradius serveru volam prostrednictvim jeho modulu rlm_perl (to je embedded interpreter) externi program:
...
$output=`program`;
$rc=$?;
...
Hodnota $? je ale po skonceni vzdy -1 a $! je "No child processes", Volany program se spolehlive provedl (vratil vystup) a skoncil normalne.
Tusim, ze problem asi souvisi s nastavenim zpracovani SIGCHLD v radiusd na SIG_IGN (nedokazu overit), a odhaduju, ze se tim asi ma branit vzniku zombies.
Nastaveni se zrejme pres exec prenasi i do vyvolaneho shellu a v nem spusteneho programu, takze mi nepomuze ani:

$output=`program; echo RC=$?`

a nasledne zpracovani textoveho vystupu - vraci se vzdy "RC=0", i kdyz jako program spustim treba /bin/false.

Chovani urcite souvisi s radiusd resp. rlm_perl, protoze totez pustene mimo radiusd funguje uspokojive.

Budu velice vdecny za kazdou radu.

M. Vancl

jadro: 2.6.8-24-smp
Perl: 5.8.5
freeradius: 1.0.0
system SuSE 9.2
Perl je multithredovy a radiusd pro spousteni perlovych skriptu thready skutecne tvori, ale netusim, jestli to muze mit vliv a ani nevim, jak to pripadne vypnout.




Další informace o konferenci Linux