我正在编写一个perl脚本,在5秒后退出一个线程,如下所示。但是我无法从if条件打印消息。
脚本的输出是闹钟
如何在线程超时时从父进程打印正确的错误消息。
#!/usr/bin/perl
use strict;
use warnings;
use threads;
my $th = threads->create( \&sub1 );
my $thid = $th->tid();
eval
{
$SIG{'KILL'} = sub
{
if ( $th->is_running() )
{
print "timed out, exiting the thread $thid\n";
$th->exit();
}
};
alarm(5);
$th->join();
};
sub sub1
{
my $i = 0;
while ( $i == 0 )
{
}
}
答案 0 :(得分:2)
如果您想使用闹钟超时系统调用,则需要使用eval / die对。
或者您可以使用Sys :: SigAction并执行以下操作
use Sys::SigAction qw( timeout_call );
if ( timeout_call( 5 ,sub { $retval = DoSomething( @args ); } )
{
print "DoSomething() timed out\n" ;
}
编辑:请参阅问题的回答:Perl threads with alarm
另见thread safe alarms的讨论。