use strict; use warnings "all"; use IPC::Open3; use POSIX; my $timeout = shift @ARGV; my ($cpid); eval{ local $SIG{ALRM} = sub {die "alarm\n"}; alarm $timeout; #setsid(); #setpgrp(0,0); $cpid = open3("<&STDIN", ">&STDOUT", ">&STDERR", @ARGV) or die $!; waitpid($cpid, 0); alarm 0; }; if($@){ die if $@ ne "alarm\n"; print "timed out\n"; my $num = kill 15, $cpid; print "sent kill to $num\n"; waitpid($cpid, 0); }