[EMAIL PROTECTED] wrote:

> On Tue, Dec 09, 2003 at 01:04:01AM +0100, [EMAIL PROTECTED]
> wrote:
>> eval {
>>   local $SIG{ALRM} = sub { die "alarm\n" };
>>   alarm 10;
>>   system($prog, @args);
>>   alarm 0;
>> };
>> if($@ =~ /alarm/) {
>>   # have to kill $prog;
>     # I tried with 'use POSIX qw/sys_wait_h/;'
>     my $kid = waitpid -1, WNOHANG;
>     print "$kid\n";
>     kill 15, $kid;
>> }

fork the child separately so you can kill it later:

#!/usr/bin/perl -w
use strict;

#--
#-- demo.pl <seconds to sleep>
#--

my $child = undef;

eval{

        local $SIG{ALRM} = sub { die 'alarm' };

        $child = fork;

        die 'fork' unless(defined $child);

        if($child){
                #--
                #-- give child 5 seconds to complete
                #--
                alarm(5);
                wait;
                alarm(0);
        }else{
                system("sleep $ARGV[0]");
                exit;
        }
};

#--
#-- check for error
#--
if(my $error = $@){

        if($error =~ /alarm/){

                #--
                #-- reset for safety
                #--
                alarm(0);

                #--
                #-- kill it if it's still there
                #--
                kill 9, $child or warn "Unable to kill $child: $!\n";

                die "sleep taking too long: $error";

        }elsif($error =~ /fork/){

                die "Unable to fork: $error";
        }else{
                die "Error: $error";
        }
}

__END__

[panda]# demo.pl 2
[panda]# demo.pl 20
sleep taking too long: alarm at ./tmp.pl line 10.
[panda]#

david
-- 
s,.*,<<,e,y,\n,,d,y,.s,10,,s
.ss.s.s...s.s....ss.....s.ss
s.sssss.sssss...s...s..s....
...s.ss..s.sss..ss.s....ss.s
s.sssss.s.ssss..ss.s....ss.s
..s..sss.sssss.ss.sss..ssss.
..sss....s.s....ss.s....ss.s

,....{4},"|?{*=}_'y!'+0!$&;"
,ge,y,!#:$_(-*[./<[EMAIL PROTECTED],b-t,
.y...,$~=q~=?,;^_#+?{~,,$~=~
y.!-&*-/:[EMAIL PROTECTED] ().;s,;,
);,g,s,s,$~s,g,y,y,%,,g,eval

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to