2011-09-14 35 views
0

(之前运行下面的脚本替换的/ home /波顿/ T /与你创建或删除权限的文件的路径移动。)Perl的羊群没有从CGI工作

当我开始这个剧本在命令行中,并在10秒再次启动命令行相同的脚本,它打印我的期望:

Flock: 1 

Flock: 0 

水涨船高。

但是当我运行两次(与请求小于10秒的时间之间的间隔)作为CGI,其是如http://test.localhost/cgi-bin/test2.pl它打印

Flock: 1 

两个2个CGI请求。

什么是错误?从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

你确定这两个请求是并行运行吗?它们可能会被顺序处理,也就是说第二个请求可能会在第一个请求完成之后以及锁定被释放后处理。

+0

我在Debian Linux上使用Apache/2.2.16。我想知道它是否可以顺序处理请求。如何检查这个? – porton

+3

在锁定/睡眠之前和之后,您的脚本是否打印出时间戳。如果他们顺序运行,你会得到一个“之前/之后/之前/之后”模式,如果他们平行,你会得到一个“之前/之前/之后/之后”的模式。 – CanSpice