Presmerovanie SIG{} vo FCGI
Aben Siatris
aben na webcom.sk
Čtvrtek Říjen 13 14:19:20 MEST 2005
Mam fastcgi script, ktory som potreboval opatrit
osetrenim pre kill-nutie a tiez vyriesit timeout.
#!/bin/perl
use FCGI;
$SIG{TERM}=sub
{
print "Content-type: text/html\n\n";
# a dalsie hluposti
exit(0);
}
$SIG{ALRM}=sub
{
print "Content-type: text/html\n\n";
# a dalsie hluposti
exit(0);
}
my $req=FCGI::Request();
alarm(10);
while ($req->Accept() >= 0)
{
alarm(0);
# vykonanie requestu
alarm(10);
}
ma to za ulohu timeoutnut vo chvili ak 10 sekund nechodia ziadne
requesty a urobit exit(0); Chova sa to vsak velmi podivne.
Pocas toho ako visi na funkcii "$req->Accept()" nieje schopny
timeoutnut ale az vo chvili ked z nej vyjde (teda paradoxne vo chvili
ked dostane request)
povedzme ze teda mame process ktory bezi a prestane dostavat
requesty (nieje momentalne potrebny), po 10 sekundach by mal
vytimeoutovat, ale to sa nestane. Caka povedzme nejakych dalsich
20 sekund, proste az kym nedostane dalsi request a vtedy si "spomenie"
na to ze bol vytimeoutovany a skoci na handler.
Myslim ze je to sposobene tym ze Funkcia Accept je napisana v C a
skompilovana do kniznice pomocou XS.
Je mozne toto chovanie nejako osetrit?
Další informace o konferenci Perl