@resources = {cdrw0 cdrw1 cdrw2} my $chld; while (@thisround) { my @sort_resource = sort(@resource); @resource = @sort_resource; while (@resource) { last unless @thisround; my $resource = shift @resource; my $data = shift @thisround; if (($chld = fork()) > 0) { # parent code # % jobs holds pid -> resource $jobs{$chld} = $resource; } else { # child code runcmd($resource, $data); exit; # end chld, trigger $SIG{CHLD} } } sleep until @resource == $num_resources; last unless @thisround; } sleep until keys %jobs == 0; # wait for all jobs