$ perl test.pl 2 perl -e'system("sleep 4; echo My work is done")'
timed out
sent kill to 0
My work is done
$?=0
$ perl test.pl 2 perl -MPOSIX -e'setpgrp(0,0); system("sleep 4; echo My work is done")'
timed out
sent kill to 1
$?=15
####
eval{
local $SIG{ALRM} = sub {die "alarm\n"};
alarm $timeout;
$cpid = open3("<&STDIN", ">&STDOUT", ">&STDERR", '-');
if (!$cpid) { # Child
setpgrp(0,0);
exec(@ARGV)
or die "exec: $!";
}
waitpid($cpid, 0);
alarm 0;
};
##
##
$ perl fixed.pl 2 perl -e'system("sleep 4; echo My work is done")'
timed out
sent kill to 1
$?=15