我对我创建的脚本有疑问。这是我第一次使用信号,因为我希望我的脚本像守护进程一样运行,所以我设置了几个信号Handler来正确结束我的脚本:
local $SIG{HUP} = \&StopSuperviser;
local $SIG{INT} = \&StopSuperviser;
local $SIG{QUIT} = \&StopSuperviser;
local $SIG{ILL} = \&StopSuperviser;
local $SIG{ABRT} = \&StopSuperviser;
local $SIG{TERM} = \&StopSuperviser;
这是正常工作但是当我将其中一个信号发送到我的脚本(Crt-C,kill -15,kill -1 ...)时,StopSuperviser函数被正确调用但我总是在我的脚本中收到以下错误输出:
参数“HUP”在全局销毁期间在空操作中不是数字。
我在google上搜索过,但我没有找到任何处理此行为的内容。
愿有人对此有所了解吗?
非常感谢你的帮助
最好的问候
Florent的
#感谢你的回复,这里是StopSuperviser功能:
sub StopSuperviser
{
print "On quite\n";
$StopAlarm = 1;
&DeleteThreadOrder($AllProcess);
foreach my $Subprocess (@$AllProcess) {
foreach my $thread (@{$Subprocess->{Thread}}) {
$thread->kill('USR1');
$thread->join();
}
}
exit;
}
我也使用以下包:
use Alarm::Concurrent;
这可能很重要,或者可能不是:) 希望这有帮助:)
再次感谢您的回复和帮助
最好的问候
Florent的
答案 0 :(得分:0)
今年早些时候我遇到了这个问题,最终在PerlMonks上找到了解决方案,但我现在找不到链接了。如果我碰到它,我会更新。他们的解释比我在这里提出的要详细得多。
它是perlsub中描述的一个特征的表达式:
如果使用&形式,参数列表是 可选,如果省略,则不为子例程设置@_数组: 调用时的@_数组对子程序可见。
如果内存有效,您应该可以通过更改:
来修复它local $SIG{HUP} = \&StopSuperviser;
到
local $SIG{HUP} = sub { StopSuperviser() };