use Proc::Queue size => 10, qw(run_back all_exit_ok); while(...) { my @logfn = get_log_names(); my @pids = map { run_back { process_log $_ } } @logfn; all_exit_ok(@pids) or print STDERR "some child failed\n"; }