バックグラウンドで処理するCGIを作る

  • forkでプロセスを分岐して、標準入出力を閉じる

使用例

#!/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
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。