- 締切済み
IIS7.0でPerlのCGIにてバックグラウンド
はじめまして、初心者の質問で恐縮ですが、以下の点を教えて欲しいです。 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"; } よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- osamuy
- ベストアンサー率42% (1231/2878)
やっぱりwaitを外すのが手っ取りばやいように思えます。 それでだめなら、forkする前にstd*をクローズするとか。
- osamuy
- ベストアンサー率42% (1231/2878)
> wait; これ。
お礼
回答ありがとうございます。 wait; は子プロセスの終了を親プロセスが待っていて、 このプログラム上は問題ないと思っています。 (実施したいことは出来ると思っています) waitで待っていても、子プロセスでclose(STDOUT) で、HTMLは出力できたと思っていましたが。。。。 意味が違ってたら、すみません。
お礼
回答ありがとうごいました。 ただ、waitをはずしたり、systemコマンド、別ファイルにPerlを 分けてバックグラウンドで実行したり、いろいろやってみましたが、 うまくいきませんでした。 IISでは、Perlで時間のかかる処理のバックグラウンドの実行で やり方があれば教えて欲しいです。。。 ちょっと、Javascriptなどの方法を模索してみようかと思っています。