在CGI网页中,我有一个按钮,当按下提交表单和子程序时,它具有:
sub run {
&emailDebug("Started " .localtime);
system("(/tools/script1.pl &) ; (/tools/script2.pl &)");
&emailDebug("Ended " .localtime);
}
Run Code Online (Sandbox Code Playgroud)
它们都是在11:08:05开始(因此是花哨的命令),我自己在脚本中加上时间戳并通过电子邮件发送给自己.
第二次完成11:08:22和第一次11:08:36,但上面发送的电子邮件将显示11:08:06.
最有趣的是,只要两个脚本中的较长时间运行,页面就会加载大约30秒.
我不介意页面加载,但我不明白为什么它的行为像这样.在页面加载时,显然子程序run本身不会返回,但两封电子邮件几乎同时发送.
system只要您调用的命令允许它返回.在这个特定的例子中,它应该立即返回,但这可能会因shell而异.为了更加确定,您可能会尝试将呼叫分成两部分:
system("/tools/script1.pl &");
system("/tools/script2.pl &");
Run Code Online (Sandbox Code Playgroud)
此外,根据您的Web服务器配置,它可能会注意到您仍然在分叉的子节点中打开STDOUT,它将等待所有它们在提供响应之前结束,即使您的主脚本已经结束.将生成的脚本STDOUT/ERR重定向到/ dev/null,close(STDOUT)并close(STDERR)在主脚本中或参考您的Web服务器/框架文档,了解如何在完成输出后刷新响应.
| 归档时间: |
|
| 查看次数: |
139 次 |
| 最近记录: |