2012-01-09 61 views

回答

2

1)timeout_call()使用幾乎相同的成語在eval/alarm塊作爲萊昂的例子來包裝系統調用:

my $ALARM_EXCEPTION = "alarm clock restart"; 
my $h; 
eval { 
    $h = set_sig_handler('ALRM', sub { die $ALARM_EXCEPTION }, { }); 
    alarm 10; 
    flock $fh, 2 or die "cannot flock: $!"; 
    alarm 0; 
}; 
alarm 0; 
$SIG{ALRM} = $h; 
if ([email protected] && [email protected] !~ quotemeta($ALARM_EXCEPTION)) { die } 

所以,如果set_sig_handler禁用/覆蓋安全信號處理,然後timeout_call亦如此。 2)純Perl仍然可以與操作系統進行大量的交互,並且每個系統調用對信號的響應方式在各個平臺之間可能會有很大差異。所以一般來說答案是否定的。