2011-09-14 5 views
0

CGIからは動作しません(置き換える以下のスクリプトを実行する前に/ホーム/ポートン/ T /作成または消去する権利を持っているファイルへのパスに移動します。)Perlの群れは

を、私はこのスクリプトを起動するとコマンドラインから、10秒の間には、再度コマンドラインから同じスクリプトを起動し、それは私が何を期待出力します

Flock: 1 

Flock: 0 

を相応に。

しかし、それは両方の2つのCGI要求を

Flock: 1 

を印刷しhttp://test.localhost/cgi-bin/test2.plように私は、CGIとして(要求未満10秒の時間間隔で)を2回、それを実行したとき。

エラーは何ですか?なぜCGIから実行すると、別の予期しない方法で動作するのですか?

#!/usr/bin/perl 

use strict; 
use warnings; 

use Fcntl qw(:flock); 

print "Content-Type: text/plain\n\n"; 

open(my $lock_fh, '>', "/home/porton/t/MOVE"); 

print "Flock: " . flock($lock_fh, LOCK_EX|LOCK_NB) . "\n"; 

sleep 10; 

答えて

3

2つのリクエストが並行して実行されていますか?それらは順次処理され、すなわち、第1の要求が完了した後、およびロックが解除された後に、第2の要求を処理することができる。

+0

Debian LinuxではApache/2.2.16を使用しています。私はそれが要求を連続して処理できるかどうか疑問に思います。これをチェックするには? – porton

+3

ロック/スリープの前後にスクリプトがタイムスタンプを出力するようにしてください。彼らが順番に実行している場合は、 "前/後/前/後"のパターンが得られます。並列の場合は、前/後/後のパターンが得られます。 – CanSpice