• ベストアンサー

Windowsで重い処理を実行したい

CGIを作成している環境が Windows2000+IIS+ActivePerlで、時間がかかる処理を 行うプログラムを作成しています。 いろいろ調べて、alarm()とシグナルでブラウザタイムアウトを 防ぐ方法や、forkして子プロセスする方法などを、 試したのですが、うまくいかず、 よくよく調べてみるとWindows環境だと、alarmもforkも未実装らしく困り果てています。 IISでタイムアウト時間を延ばすのは避けたいです。 ブラウザのタイムアウトを回避しつつ、処理の長い CGIを実行するいい方法はないでしょうか?

  • Perl
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

IISでできるかどうかはわかりませんが、時間のかかる処理を実行する前に標準出力を閉じてしまえばWebサーバに処理が終わったと勘違いさせることができると思います。 (apacheやanHTTPDではこの方法でできます) ソースはこんな感じで。 # # HTMLの表示処理部分 # # 標準出力を閉じる close(STDOUT); # # ここから時間のかかる処理を行う # ただ、ブラウザ上での表示が完了した後もプロセス自体は動いていることになるので、そのあたりを考慮したプログラミングをする必要があります。

club_m2005
質問者

お礼

お返事が遅くなってすいません。 教えていただいた件を実行してみましたが、 だめでした。 処理が終了するまで、ブラウザが開放されないみたいです。 ん~IISは使いづらいです・・・

関連するQ&A

  • IISのタイムアウト設定について

    Windows2000+IIS6.0+ActivePerlで、時間がかかる処理を行うプログラムを作成しているのですが、 CGIタイムアウトが発生してしまい、最後まで実行 出来ません。 IISの設定で、ASPのタイムアウトや、セッションタイムアウトを30分とかに設定してもなぜか5分ほどでエラーになってしまいます。 どのようにすればCGIの実行時間を延ばせるのでしょうか?

  • CGIでサーバタイムアウトを避ける方法

    cgiアプリで、かなり時間のかかるDB登録処理を作成しています。 で、サーバのタイムアウトになりアプリがIIS Serverにkillされてしまうのですが そのkillされるタイミングを知る方法はあるでしょうか? といいますのはkillされてしまうとフラグクリアなどの後処理ができず、 他のセッションからも処理ができなくなってしまうのです。 タイマー監視ではなく、その時のサーバのステータスなどがわかるといいのですが。 因みにサーバのタイムアウトの時間を変更することはできないんです。 または、それを回避させるために、 処理の途中でhttpレスポンスなどを発行して処理を継続させる方法など あるのでしょうか? 今はタイムアウト時間前に処理が終了できるよう かなり処理件数を制限していまして、   使いづらい といわれてします。 環境  windows server 2003  IIS で、 アプリはc言語で開発しています。

  • close(STDOUT)するとCGIが終了する。

    Windows2000+Apache2.2+ActivePerlでCGIを作っています。 CGIで時間のかかる処理を行いたいので、以下のような処理を行いました。 print "Content-type: ~ ~ブラウザに返す文字列を標準出力へ~ close(STDOUT); ~時間のかかる処理~ ところが、「時間のかかる処理」の部分は実行されず、どうやらSTDOUTをクローズしたことにより、 ApacheによってCGIが終了させられてしまうようです。 ネットなどで見るかぎり、UNIX系のサーバーではよく行われる方法のようなのですが、Windowsでの実装になにか違いがあるのでしょうか? また、Windowsサーバーでこのようにブラウザに処理を戻しつつ、時間のかかる処理を行いたい場合にはどうすればよいのでしょうか?

    • ベストアンサー
    • CGI
  • ファイル指定ができない!?ファイルが見つからない・・・。

    こんばんわ。 現在、IIS+ActivePerl(最新)という環境でCGIを動かそうと考えています。 Unix系サーバで実行した場合は問題なく動くのですが、IIS環境で動かすと、外部のファイルつまり掲示板のログファイルやjcode.plなどが見つかりませんと表示され動作してくれません。 私のCGIがだめなのかと思ってKentさんのCGIやいろんな人のいろんなCGIでテストしましたが、駄目でした。 ActivePerlの設定がまずいのかとおもいきや、単純なもの(外部ファイルを使わないもの)はきれいに動きました。 ファイルが見つからないとかCan't location~と出るのでIIS+Active~には問題ないと思うんですが・・・。 ファイルの指定方法がまずいのでしょうか? どうしたもんでしょう・・・誰か思い当たるどんなことでも結構です・・・教えてください。 お願いいたします・・・。

    • ベストアンサー
    • CGI
  • Perlの日記プログラムがIIS+ActivePerlで動かない

    ひとに見せるためでなく書いていた日記があり、これまで無料のCGI可サーバを使っていたのですが、今度からCGI不可になるということで、自宅のマシン(Win2K)にIIS+ActivePerlを導入して動作させようとしています。 過去データの表示はできるようになったのですが書き込みができません。エラー表示もなくタイムアウトになります。 無料サーバを使っていたときはFTPでファイルをアップロードしたときにパーミッションを変えたりしたのですが同じようにFTPソフトで変更しようとしたらWindowsではパーミッションを変更できない、と出ます。 このプログラムはIIS+ActivePerl上では動かせないのでしょうか。それとも何か設定を変えれば書き込みできるようになるのでしょうか。なお、日記CGIはnickyを使っています。 基礎的な知識がなく何が問題なのかアタリもつけられません。「ここらへん疑ってみ」などのアドバイスがありましたら教えてください。よろしくお願いします

  • IISでCGIを動かしたい

    windows 2008 server R2、IIS7.5、ActivePerlの環境でCGIを動かしたいのですが、エラーになってしまって動かないフリーの掲示板CGIがあります。一般的なレンタルサーバーでは動かせるのですが、IISで動かすにはどこに注意すればいいんでしょうか?漠然とした質問ですが、よろしくアドバイスをお願いします。

  • CGIを認識してくれなくなりました

    初めまして。cgi初心者です。 Windows2000+IIS(バージョン失念)+ActivePerl5.8.8でcgiを含むHPを作成しました。学内に閉じたNWで動かしています。 当初はなんの問題もなく動いていたのですが、先日久々に見てみるとcgiが動いていません(ソースがそのままブラウザ上に表示されます)。 ファイルが保存されているフォルダを見てみると.cgiファイルのアイコンがテキストになっていました。 IISのアプリケーションマッピングは.cgiで"C\***\perl.exe %s %s"になっています。 perlが壊れたのか?と思い、一度アンインストール→再インストールしてみたのですが、それでも駄目でした。 対処方法、そもそもこのようになった原因に思い当たることがありましたら教えていただけないでしょうか。

    • 締切済み
    • CGI
  • ActivePerl,UTF-8環境のCGIにてブラウザからアップロー

    ActivePerl,UTF-8環境のCGIにてブラウザからアップロードしたファイルの保存に失敗する件について、原因と対処方法をお願いいたします。 以下の環境でCGIを作成していましたが、  WindowsXP  ApacheServer  ActivePerl 5.10系 先日HDDがクラッシュしましたので、Windowsの再インストールからはじめて同じ環境を構築し動作確認を行っていたところ、新しい環境ではファイルのアップロードに失敗することが判明しました。 ファイルのバイナリが壊れるようです。画像等バイナリファイルをアップロードすると、ファイルサイズが3割程度増えたものが保存され、壊れます。 今回変わったところと言えば、ActivePerlのバージョンが最新になったくらいです。 調べても原因が判明しなかったことに加え、  クラッシュ前の環境ではこのような問題はなかった  Linuxサーバでは問題ない ので、悩んでいます。 問題部分のソースはこのようになります。 use utf8; # 略 CGIモジュールを使用しています $fh = $q->upload(key); open (OUT, ">$directoryname$filename"); binmode (OUT); while(read($fh, $buffer, 1024)){ print OUT $buffer;} close (OUT); close ($fh); どこも間違っていないと思うのですが、どなたかこの問題を解決できる方はおられるでしょうか。

  • perlの処理を遅くしたい

    CGI初心者です。わかる方教えてください。 少々古いですがactiveperl apache1.3.12を利用してperlプログラムを自宅のみで使うCGIプログラムをWINDOWS上で起動しています。 処理が長くまた同時に複数の処理をperlで処理します。ブラウザ送信ボタンよりCGIを実行してperl.exeを合計5つぐらい同時に起動します。 タスクマネージャーのプロセスの優先度の設定は実行当初「普通」になっていますが,これを実行当初から「低」にしたいと思っていますが やり方がよくわかりません。CGIの書き方,apacheの設定,ショートカットの書き方でできるんではないかと思っていますが,ご存じの方教えてください。OSはWINXPです。宜しくお願いします。

  • 2つのプロセスを実行するCGI

    1つのCGIで2つのプロセスを実行することを考えています。 1つは、数分かかるような処理を行い、もう1つはユーザにその処理が”実行中”であるといったメッセージを表示しようと思っています。 CGIはC&C++で作成しようと考えており、forkして子プロセスで、数分かかる処理を実行し、親プロセスでメッセージ画面表示といった流れを考えています。 で、質問ですが、この場合、メッセージ画面で子プロセスが実行している間、砂時計が表示され続けますが、これを消す方法がありますでしょうか? また、1つのCGIで、このように2つのプロセスを実行する場合に、何か良い方法はありますでしょうか?

    • 締切済み
    • CGI

専門家に質問してみよう