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