Windows 当客户端在下载过程中关闭网页时,Perl cgi脚本保持运行
我有一个perl脚本(Cgi/Apache/Windows),它在计算机上执行一些程序,并为web格式化输出。脚本需要大约4-5分钟才能完全运行 我的问题是,当有人在脚本运行时取消页面加载(或关闭web浏览器)时,服务器中的perl进程将继续运行而不做任何事情,并将锁定所有打开的文件,以便另一个脚本无法运行。进程永远不会结束,我必须使用“end process tree”来结束perl.exe和已启动的子进程,以便能够重新运行脚本Windows 当客户端在下载过程中关闭网页时,Perl cgi脚本保持运行,windows,perl,apache,cgi,Windows,Perl,Apache,Cgi,我有一个perl脚本(Cgi/Apache/Windows),它在计算机上执行一些程序,并为web格式化输出。脚本需要大约4-5分钟才能完全运行 我的问题是,当有人在脚本运行时取消页面加载(或关闭web浏览器)时,服务器中的perl进程将继续运行而不做任何事情,并将锁定所有打开的文件,以便另一个脚本无法运行。进程永远不会结束,我必须使用“end process tree”来结束perl.exe和已启动的子进程,以便能够重新运行脚本 我怎样才能确保脚本不会像这样死去?(如果脚本继续在后台运行,完成
我怎样才能确保脚本不会像这样死去?(如果脚本继续在后台运行,完成后“退出”,这是最好的解决方案)首先,CGI脚本不应运行4-5分钟
第二,请参阅。您可以通过访问标准输出来检测是否按下了停止按钮。如果用户不再等待您的回答,以下代码将在Apache/IIS CGI上消失:
eval {
print STDOUT "foobar" or die "Gone";
};
if ($@) {
&cleanup;
}
&do_something;
你可能想打印一些更智能的东西
请注意,您的4-5分钟脚本将保留Apache子进程,直到它完成运行。考虑在后台运行脚本,用Ajax来查询结果。 < P>我会说您的设计模式是次优的。CGI脚本不应该进行任何繁重的处理。它应该访问一个数据库,构造一个页面,并返回一个结果。CGI脚本应该需要几分之一秒的时间来运行。Apache的设计并没有考虑到这个用例 如果你想启动一个长处理作业,那么这个作业应该在你的webapp堆栈之外运行。您的CGI脚本可以启动作业、检查进度、终止作业等,但不必等待。用户刷新或ajax轮询可以检查正在运行的作业的状态