[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>