2012-05-08 2 views
0

I locked a fileと、システムがロックされたファイルにどのように反応するかをテストしようとしています。 私は、他のプロセスが、そのファイルが再びrequire_onceに届き、エラーで戻ってこないようになるまで、プロセスがリリースされるのを待っていたいと思います。ファイルロックのテスト

問題は私が何をするにしても、私はファイルをロックできず、別のプロセスがファイルを要求している間に待機して、そのロックされたファイルに対するシステムの反応を見ることができないようです。

私は試してみました
これは動作しません、それはPHPエンジン全体を停止します。
2. Enterキーを押すまで一時停止するバッチファイルを作成しました。使用されているexec("cmd.exe /c START c:\\1.bat");

実際には、すべてのプロセスが実際には1つのシリアルタスクキューになっているので、何らかの理由で一時停止すると他のすべてのプロセスも停止することになります。

soファイルがロックされているかどうかをテストするにはどうすればよいですか?
もちろん、もし私が正しいのであれば、他のプロセスがそれにアクセスできない場合、ファイルをロックするのは何ですか?

+1

これは、ファイルを排他的にロックする点です。誰もそれにアクセスすることはできません。 – Ahatius

+0

2つのスクリプトがあります.1つはファイルをロックするスクリプトで、もう1つはファイルを解放するために待機するスクリプトです。 – Ahatius

+0

1つのスクリプトでファイルをロックして保持する必要があります。他のスクリプトがそれに対して 'require_once'を実行したときに何が起こるかを見たいと思います。 – Ted

答えて

1
$file = fopen('somefile.php', 'r+'); 

while(!flock($file, LOCK_SH | LOCK_NB)) { 
    sleep(1); 
} 

require 'somefile.php'; 

flockはphpスクリプトでは機能しないように見えるので、ロックが存在するかどうかを確認する必要があります。

+0

システム全体を停止させるため、スリープしても切断されません – Ted

+0

親スクリプトによってスクリプトが呼び出された場合、そのスクリプトがすべて停止します。サーバー全体を停止することはありません。 1つのスクリプト内のスリープは、別々に呼び出されたスクリプトには影響しません。私はちょうどそこにCPU使用率を低く抑えるために睡眠を入れました。おそらく、ループ中にCPU使用率を下げる別の方法があります。私は、ファイルがロックされているかどうかを確認するファイルが別々に呼ばれていると仮定しています。 – Ahatius

1

require_onceは、PHPで処理されます。そのため、単にAFAIKのロックを取得することはできません。 ファイルロックを参照する場合は、this
を参照してください。ロックされたファイルにアクセスしようとすると必ずロックを使用するように指示しています。

関連する問題