在apache / unix上使用Perl脚本进行系统调用的范围

时间:2013-04-23 14:52:50

标签: perl apache unix

我有一个关于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日

由于

1 个答案:

答案 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浏览器引起。