アプリ版:「スタンプのみでお礼する」機能のリリースについて

はじめまして、初心者の質問で恐縮ですが、以下の点を教えて欲しいです。
IIS7.0のWebサーバで、CGIプログラムをPerlで作っているのですが、forkした子プロセス
で時間のかかるバックグラウンド処理を行って、親プロセスでWebブラウザに返す処理を
しようとしていますがうまくいきません。重たい処理が終了するまでWebブラウザに応答
されません。(子プロセスの終了が終わるまで、親プロセスのHTML表示処理がWebブラ
ウザに返答されません)通常、子プロセスでclose(STDOUT)で親プロセスのHTMLの
表示処理が出来ると思っていますが。。。
どのようにすれば良いか教えてもらえると幸いです。以下は参考のプログラムです。
よろしくお願いします。

$|=0;
if ( $pid = fork){ #親プロセス
&disp_html(); #HTMLを表示させるプログラム
wait;
}elsif (defined $pid) {  #子プロセス
close(STDIN);
close(STDOUT);
close(STDERR);
&heaby_prog(); #重たい時間のかかる処理
exit 0;
} else {
die "Can't fork: $\n";
}

よろしくお願いします。

A 回答 (2件)

やっぱりwaitを外すのが手っ取りばやいように思えます。


それでだめなら、forkする前にstd*をクローズするとか。
    • good
    • 0
この回答へのお礼

回答ありがとうごいました。
ただ、waitをはずしたり、systemコマンド、別ファイルにPerlを
分けてバックグラウンドで実行したり、いろいろやってみましたが、
うまくいきませんでした。
IISでは、Perlで時間のかかる処理のバックグラウンドの実行で
やり方があれば教えて欲しいです。。。
ちょっと、Javascriptなどの方法を模索してみようかと思っています。

お礼日時:2011/01/12 23:00
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

wait;

は子プロセスの終了を親プロセスが待っていて、
このプログラム上は問題ないと思っています。
(実施したいことは出来ると思っています)
waitで待っていても、子プロセスでclose(STDOUT)
で、HTMLは出力できたと思っていましたが。。。。

意味が違ってたら、すみません。

お礼日時:2011/01/10 16:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!