如何判断超时呢?

如何判断超时呢?

比如 程序执行到某条语句的时候, 这条语句一直没有返回
如果判断超时呢 ?

$result = &fun(a,b); # 这一句 有时会一直卡着  , 如何判断这句是否超时呢 ?
Benchmark 模块里面的方法  timethis ($count, "code");
可以控制 code 部分代码至少运行$count 秒

有没有方法可以控制 code部分代码最多运行$count 秒

或者这样的函数需要怎么写 , 请高手给个思路。
已经解决了
fork 一个进程就可以了
#!/usr/bin/perl  -w


use strict;
use warnings;
use POSIX;
$SIG{CHLD} = 'IGNORE';
my $isFinished = 0;
defined(my $child = fork()) or die "cant fork";
my $pid = $$;
if($child == 0) {
                
                sleep 3;
                if($isFinished == 0) {
                        print "timeout , stop running..";
                       
                }
                exit ;
}


$isFinished = &fun();
exit;
看不懂
假如3s后父进程的&fun()还没返回,那么
子进程print "timeout , stop running..",然后子进程exit,
父进程的&fun()不是还在进行啊!!
不过有个提示作用……呵呵,kill掉父进程吧,哈哈……
恩 是啊 , 如果3秒还没有返回  就KILL 掉父进程
怎么kill的,那个语句怎么写。。
上面我的代码里面 my $pid = $$;  这一句往上移一行
然后 print 语句下面 kill 9,$pid; 就可以了
#!/usr/bin/perl  -w


use strict;
use warnings;
use POSIX;
$SIG{CHLD} = 'IGNORE';

my $isFinished = 0;
sub fun {
        $isFinished = 1;
        print "Im $$ too ,the value has been changed to $isFinished..\n";
}

defined(my $child = fork()) or die "cant fork";
if($child == 0) {
                sleep 3;
                print "Im the child my pid $, I found the value still is $isFinished \n";
                exit ;
}

print "I m $$ running the child supposed sleeping . the value is $isFinished\n";
fun();
exit;




是不是因为sleep的原因  ?
那要如何判断段代码执行是否超时呢?
希望实现的是判断一个进程 超时后重启    Linux下
使用alarm 函数可以指定时间对进程发送ALRM信号
然后 用die来对ALRM处理抛出异常,进程里catch处理这个异常就可以了

$SIG{ALRM} = sub { die "timeout" };

eval {
    alarm(5);
    while(1) {
                print "Im running....\n";
        }
    alarm(0);
};

if ($@) {
    if ($@ =~ /timeout/) {
        print "hey , timeout!\n";                    # timed out; do what you will here

    } else {
        alarm(0);           # clear the still-pending alarm

        die;                # propagate unexpected exception

    }
}