pla*_*etp 7 perl signals destroy
我有一个这样的测试脚本:
package Test;
sub new { bless {} }
sub DESTROY { print "in DESTROY\n" }
package main;
my $t = new Test;
sleep 10;
Run Code Online (Sandbox Code Playgroud)
在sleep返回之后(在程序终止之前)调用析构函数.但是如果脚本以Ctrl-C终止,则不会调用它.是否有可能在这种情况下调用析构函数?
你必须设置一个信号处理程序.
package Test;
sub new { bless {} }
sub DESTROY { print "in DESTROY\n" }
package main;
my $terminate = 0;
$SIG{INT} = \&sigint;
sub sigint { $terminate = 1; }
my $t = new Test;
while (1) {
last if $terminate;
sleep 10;
}
Run Code Online (Sandbox Code Playgroud)
沿着这些方向的东西.然后在你的主循环中检查$terminate,如果它设置正常退出程序.
发生的事情是cntl -c中断睡眠,信号处理程序被称为设置$terminate,睡眠立即返回,它循环到顶部,测试$terminate和退出优雅.
| 归档时间: |
|
| 查看次数: |
1519 次 |
| 最近记录: |