#!/usr/bin/perl
$SIG{'TERM'}=sub{exit;};
use FCGI;
my $FCGI=FCGI::Request(\*STDIN,\*STDOUT,\*STDERR,\%ENV,0,FCGI::FAIL_ACCEPT_ON_INTR);
while($FCGI->Accept>=0){
print "content-type:text/plain\n\n$$";
sleep(10);
$FCGI->Finish;
exit;
}
END{
open(FILE,"+>>test.txt");
print FILE "$$\n";
close(FILE);
}
こんな感じでテストしてみた。
まず、sleep(10)で10秒待って、処理中にもう一個接続。
って感じだが、
同じアドレスからの接続だとapacheの方で待機しちゃう?
とにかく、別アドレスじゃないと別プロセスにつながらないくさい。
別アドレスからの同時接続ならDastCGIプロセスは2個になった。
(当然、FastCGIは複数プロセス実行に設定してある。)
あと、
sleep(10);
$FCGI->Finish;
だが、
逆に
$FCGI->Finish;
sleep(10);
の場合も、別アドレスからの接続であっても待機されるぽくて、2個目のプロセスは起動しない。
で、
exit;
で終了だが、
ENDブロックは両方のプロセスで実行された。
ENDブロック使うだけでプロセス終了時処理できそうだね。
FastCGIのアクセスログ取りたいと思うんだが、
データベースに記録する感じだと、
アクセス毎にデータベースアクセスはちとやだ。
メモリにログ溜め込んで一定時間でまとめて記録。
TERMされたらその時に記録。
って感じのことしようと思う。