0

我有一个关于 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");

我注意到,如果我从 Web 浏览器调用此脚本 TWICE,它将按顺序执行这些请求 - 总共 30 秒。Perl/unix 如何处理并行执行和使用系统命令?使用系统调用时是否有可能出现跨会话问题?或者 apache 是否将这些服务器调用中的每一个都视为一个新的控制台会话进程?

在此示例中,我基本上是在尝试测试是否会在“错误的”PID 文件夹中创建不同的 PID 文件。

CentOS 发布 5.3 Apache/2.2.3 2009 年 7 月 14 日

谢谢

4

1 回答 1

0

如果您通过正常的 CGI 接口调用脚本,那么每次您请求网页时都会调用您的脚本。这意味着每次它获得一个新的进程 ID。基本上,对于 CGI 来说,Apache 和您的程序之间的接口是命令行参数、环境变量STDOUTSTDERR. 否则一切都是正常的命令调用。

当您使用 mod_perl 之类的机制时,情况会有所不同,但您似乎不使用此 ATM。

Apache 不进行任何同步,因此您可以期待MaxClients(参见 apache 文档)脚本的并行调用。

PS 来自 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 测试),因此在测试时可能会出现请求被一个接一个地处理。这与服务器无关,而是由网络浏览器引起的。

于 2013-04-24T09:56:07.237 回答