我有一个关于unix / apache会话范围的示例和问题。这是我正在使用的测试脚本:
#! /usr/bin/perl -I/gcne/etc
$pid = $$;
system("mkdir -p /gcne/var/nick/hello.$pid");
chdir "/gcne/var/nick/hello.$pid";
$num = 3;
while($num--){
system("> blah.$pid.$num");
#sleep(5);
system("sleep 5");
}
system("> blahDONE.$pid");
我注意到如果我从网络浏览器调用此脚本TWICE,它将按顺序执行这些请求 - 总共30秒。 Perl / unix如何处理并行执行和使用系统命令?使用系统调用时是否有可能出现跨会话问题?或者,apache是否将每个服务器调用视为新的控制台会话进程?
在这个例子中,我基本上试图测试是否会在“错误的”PID文件夹中创建不同的PID文件。
CentOS版本5.3 Apache / 2.2.3 2009年7月14日
由于
答案 0 :(得分:0)
如果您通过普通的CGI界面调用脚本,那么每次请求网页时都会调用脚本。这意味着每次获取新的进程ID。基本上对于CGI来说,Apache和你的程序之间的接口是命令行args,环境变量和STDOUT
以及STDERR
。否则一切都是正常的命令调用。
当您使用mod_perl这样的机制时情况稍有不同,但似乎您没有使用此ATM。
Apache没有进行任何同步,因此您最多可以预期MaxClients
(请参阅apache docs)脚本的并行调用。
P.S。来自apache和shell的调用之间的环境变量有点不同,但这与您的问题无关(但您可能想知道是否缺少USER或类似变量)。
另请参阅更多信息:http://httpd.apache.org/docs/2.4/howto/cgi.html 特别是:http://httpd.apache.org/docs/2.4/howto/cgi.html#behindscenes
浏览器一次只能发出一个呼叫(使用firefox测试),因此在测试时可能会出现请求一个接一个地处理。这与服务器无关,但由Web浏览器引起。