中断信号 的handle函数可能在执行的过程中被进一步的中断,如果这个handle函数执行过程比较长。并且会recursively调用之前的中断Handle函数。所以最保险的做法是在handle函数声明内部的SIG函数。

参考的demo code

$int = 0;
$SIG{INT} = sub {   $int = 1;
                              $SIG{INT} = 'IGNORE';
                              $ index=0;
                              while(1)
                             {
                                     print "inside INT $index ....\n";
                                    $index++;
                                      sleep(2);
                                      if($index >500)
                                     {
                                           last;
                                      }
                             }

                         };

while (1) {
    print "Processing..\n";
    sleep 1;
    if ($int == 1) {
        print "Break? ";
        $_ = <>;
        chomp;
        if (/y/i) {
            exit;
        }
        else {
            $int = 0;
        }
    }
}