foreach $task (@tasks) {
$task->do_one_task()
};
####
foreach $task (@tasks) {
use POSIX ':sys_wait_h';
my $child = fork();
if ($child) {
for (my $polls = 30; waitpid($child, WNOHANG) == 0; --$polls) {
if ($polls < 1) {
print "Game over...killing $child\n";
kill 'ABRT', $child;
# Maybe return some code, or exit here
}
sleep 1;
}
}
else {
$task->do_one_task()
exit 0;
}
}
####
my $child = fork();
if ($child) {
$SIG{ALRM} = sub {
print "Game over...killing $child\n";
kill 'ABRT', $child;
# Maybe return some code, or exit here
};
alarm 10;
# Waiting for child or alarm
waitpid($child, 0);
}
else {
$task->do_one_task()
exit 0;
}