7

Windows 上で実行しているときに、Perl CGI スクリプトからプロセスをフォークする際に問題が発生しました。主な問題は、Windows での実行時に「fork」がエミュレートされ、実際には新しいプロセス (現在のプロセスの別のスレッド) を作成していないように見えることです。これは、プロセスの終了を待機している Web サーバー (IIS など) が、「バックグラウンド」プロセスが終了するまで待機し続けることを意味します。

Windows で CGI スクリプトからバックグラウンド プロセスをフォークする方法はありますか? さらに良いことに、クロスプラットフォームの方法でこれを行う単一の関数を呼び出すことができますか?

(そして、人生をさらに困難にするために、フォークされたプロセスの出力を同時にファイルにリダイレクトする良い方法が本当に欲しいです)。

4

5 に答える 5

9

プラットフォームに依存しない方法でこれを行いたい場合は、Proc::Backgroundがおそらく最良の方法です。

于 2008-09-05T13:36:59.197 に答える
3

Win32::Process->Create with DETACHED_PROCESS パラメータを使用

于 2008-09-05T13:29:09.653 に答える
0

パーフォーク

Perl は、同じ名前の Unix システム コールに対応する fork() キーワードを提供します。fork() システム コールが利用可能なほとんどの Unix ライクなプラットフォームでは、Perl の fork() は単純にそれを呼び出します。

fork() システム コールが利用できない Windows などの一部のプラットフォームでは、Perl をビルドして fork() をインタープリター レベルでエミュレートできます。エミュレーションは、Perl プログラムのレベルで実際の fork() と可能な限り互換性があるように設計されていますが、この方法で作成されたすべての疑似子「プロセス」が生きているという事実に起因する特定の重要な違いがあります。オペレーティングシステムに関する限り、同じ実際のプロセスで。

于 2008-09-05T13:23:52.957 に答える
0

特に Perl で Win32 オブジェクトを扱う場合に、Windows での fork() に関する実際の問題を発見しました。したがって、それが Windows 固有のものである場合は、Perl 内の Thread ライブラリを参照することを強くお勧めします。

私はこれを使用して、IIS を使用する Web サイトで一度に複数の接続を受け入れ、さらに多くのスレッドを使用してさまざまなスクリプトを一度に実行します。

于 2008-10-27T10:07:44.590 に答える