use warnings; use strict; use Data::Dumper; use Win32::Job; my $cmd = "sleep 20"; my ($min_time,$max_time,$kill_time) = (12,15,30); my $i=1; my $max_sent = 0; my $job = Win32::Job->new; my $pid = $job->spawn(undef, $cmd, { stdin => 'NUL', stdout => 'stdout.log', stderr => 'stdout.log'}); print "PID = $pid\n"; my $ok = $job->watch("handler", 1); if($ok) { print "Done\n" ; } else { print "Problem !\n"; } my $status = $job->status; print Dumper($status); if($i<=$min_time) { print "MIN_TIME Too short...\n"; } sub handler { print "$pid still alive after $i sec\n"; $i++; if($i>$max_time and $max_sent==0) { print "MAX_TIME Too long...\n"; $max_sent = 1; } if($i>$kill_time) { print "KILL TIME : kill...\n"; return 1; } return 0; }