gpt4 book ai didi

perl - 如何限制 IIS 中 Perl 脚本的执行时间?

转载 作者:行者123 更新时间:2023-12-02 17:34:01 24 4
gpt4 key购买 nike

这是一个共享托管环境。我控制服务器,但不一定控制内容。我有一个带有 Perl 脚本的客户端,该脚本似乎时不时地失去控制,并消耗 50% 的处理器资源,直到进程被终止。

使用 ASP 脚本,我可以限制脚本运行的时间,并且 IIS 会在 90 秒后将其关闭。这不适用于 Perl 脚本,因为它作为 cgi 进程运行(并且实际上启动外部进程来执行脚本)。

类似地,在工作进程中查找过多资源消耗的技术可能不会发现这一点,因为正在消耗的资源(处理器)正在被子进程而不是 WP 本身占用。

有没有办法让 IIS 中止运行时间过长的 Perl 脚本(或其他 cgi 类型进程)?怎么办?

最佳答案

在 UNIX 风格的系统上,我会使用信号处理程序捕获 ALRM 事件,然后使用警报函数启动计时器,然后再启动我预计可能会超时的操作。如果操作完成,我将使用 Alarm(0) 关闭警报并正常退出,否则信号处理程序应该拾取它以优雅地关闭所有内容。

我已经有一段时间没有在 Windows 上使用 perl 了,虽然 Windows 有点 POSIXy,但我不能保证这会起作用;您必须检查 perl 文档以了解您的平台是否支持信号或支持的程度。

关于信号处理和这种使用alarm()的自毁编程的更多详细信息可以在Perl Cookbook中找到。这是从另一篇文章中摘录并稍作修改的简短示例:

eval {
# Create signal handler and make it local so it falls out of scope
# outside the eval block
local $SIG{ALRM} = sub {
print "Print this if we time out, then die.\n";
die "alarm\n";
};

# Set the alarm, take your chance running the routine, and turn off
# the alarm if it completes.
alarm(90);
routine_that_might_take_a_while();
alarm(0);
};

关于perl - 如何限制 IIS 中 Perl 脚本的执行时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75156/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com