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