#!/usr/bin/perl use strict; # https://perlmonks.org/?node_id=11150996 use warnings; my @testLists = 1 .. 7; # FAKE for testing my $opts = 'opts'; # FAKE for testing my %pids; # NOTE changed to hash because children finish in any order foreach my $list (@testLists) { while( keys %pids >= 2 ) { delete $pids{ +wait }; } if( my $pid = fork ) { $pids{ $pid }++; } elsif( defined $pid ) { my $status += regressions($opts, $list); exit; } else { die "fork failed $!"; } } foreach my $pid ( keys %pids ) { waitpid($pid, 0); } sub regressions # FIXME for testing { print time, " pid $$ starting on (@_)\n"; sleep 1 + int rand 3; print time, " pid $$ ending on (@_)\n"; }