Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 当客户端在下载过程中关闭网页时,Perl cgi脚本保持运行_Windows_Perl_Apache_Cgi - Fatal编程技术网

Windows 当客户端在下载过程中关闭网页时,Perl cgi脚本保持运行

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和已启动的子进程,以便能够重新运行脚本 我怎样才能确保脚本不会像这样死去?(如果脚本继续在后台运行,完成

我有一个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轮询可以检查正在运行的作业的状态