当前位置:  开发笔记 > 编程语言 > 正文

为什么我的HUP信号处理程序不更新Perl中的全局变量?

如何解决《为什么我的HUP信号处理程序不更新Perl中的全局变量?》经验,为你挑选了1个好方法。

我正在做类似以下的事情:

我运行Perl脚本,其中包含以下内容:

# First i install a signal handler for HUP which sets a global flag.
$SIG{"HUP"} = sub { print "HUP received\n"; $received_hup = 1 };
# Now i wait for HUP to be received.
my $cnt = 0;
for ($cnt = 0; $received_hup != 1 and $cnt < 900; $cnt++) {
   sleep(1); 
}
print ($received_hup == 1) ? "true" : "false";

然后我将HUP发送到此perl进程.

我发现虽然每次"HUP收到"也会被打印,但有时也会打印出来.即,虽然调用了信号处理程序,但不修改全局变量.

我不熟悉Perl中的并发问题,所以请指导我.



1> derobert..:

好吧,首先,你的程序实际上不可能打印"false",因为你在打印中缺少一对括号:

print (($received_hup == 1) ? "true" : "false");

没有这个额外的对,它被解析为:

(print($received_hup == 1)) ? "true" : "false";

这显然不是你想要的.

那个测试程序 - 用正确的括号修改 - 在Debian Linux w/perl 5.10上运行得很好.我尝试了100多次,每次打印"HUP收到"和"真实".如果那个确切的测试程序不适合你,我想你只是有一个错误的perl版本.在我认为5.8之前的旧版本的perl确实存在信号处理问题.


您可以添加,如果已启用警告,则会发出警告.
推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有