使用例
#!/usr/bin/perl
# forkする
my $pid = fork;
# forkが失敗した場合はエラー処理を行う
if (!defined($pid)) {
die "fork faild.";
}
if ($pid > 0) {
# 親プロセス
# HTMLを出力
print "Content-Type: text/html", "\n\n";
print "<html><head></head><body>processing background job...";
print "</body></html>";
} else {
# 子プロセス
# 標準入力、標準出力、標準エラーをクローズ
close(STDIN);
close(STDOUT);
close(STDERR);
# 重い処理を行う(例)
sleep(20);
}
exit(0);
動作確認は、CGIを実行しているサーバで、ターミナルからpsコマンドを利用して
当該スクリプトが一定時間存在する事を調べればよい。
2011/10/5追記
データベースに接続していた場合、終了するプロセス側で終了処理で切断される場合があるため、forkする前に一旦disconnectしておき、その後「重い処理を行う」部分で接続しなおすと良い。
最終更新:2011年10月05日 13:25