my %kid; for (0 .. $num) { defined(my $cpid = fork) or warn $! and next; $kid{$cpid} = undef, next if $cpid; # do kid stuff exit 0; } delete $kid{wait()} while %kid;