2012-12-24 1 views
6

ApacheでPHPで無限ループを実行している間に、スクリプトの実行が中断されるまで、他のページ/スクリプトがハングしてしまいます。ただし、他のページは別のユーザーセッションまたはブラウザで実行されます。これは解決できますか?PHPの無限ループが他のスクリプトへのアクセスを阻止していますか?

+0

マシンにはいくつのCPUがありますか?いくつのスレッドがApacheで動作していますか?私は、複数のスクリプトが一般的に同時に実行できると思っていたでしょう。おそらくあなたが必要かもしれません: http://httpd.apache.org/docs/2.2/mod/worker.html (私はあなたの "無限"は単に "while(1);"あなたのmain.phpとのロック競合を引き起こすかもしれないもっと複雑なものではありません) –

+0

あなたの無限のスクリプトはセッションを必要としますか?そうでない場合は、コマンドラインから実行できます。 phpはプログラムを実行するのに適切なツールではないかもしれませんが... – jeroen

+1

あなたの無限実行スクリプトの専用/特別なセッションIDを使用することができます。通常のセッションIDの – jeroen

答えて

4

これは競合状態の問題です。

セッションが完了すると、セッションIDに添付されたファイルが制限付きの権限(読み取りと書き込みのためにロックされた状態)で開かれます。もう1つのsession_start()が呼び出された場合、2番目のスクリプトがセッションを非同期に変更しないように、セッションファイルのロックが解除されるのを待ちます。

this articleを見て、私よりもうまく説明してください。

+4

と競合できないことを確認します。これは、「競合状態」の定義ではなく、単純なロックされたリソースです。しかし、正解。 – deceze