• 締切済み

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"; } よろしくお願いします。

みんなの回答

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

やっぱりwaitを外すのが手っ取りばやいように思えます。 それでだめなら、forkする前にstd*をクローズするとか。

yamakiyo2
質問者

お礼

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

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

> wait; これ。

参考URL:
http://www.google.co.jp/search?hl=ja&q=perlfunc+wait&lr=lang_ja
yamakiyo2
質問者

お礼

回答ありがとうございます。 wait; は子プロセスの終了を親プロセスが待っていて、 このプログラム上は問題ないと思っています。 (実施したいことは出来ると思っています) waitで待っていても、子プロセスでclose(STDOUT) で、HTMLは出力できたと思っていましたが。。。。 意味が違ってたら、すみません。

関連するQ&A