#!/usr/bin/perl use threads; sub something_1 { my $thr; foreach (1..10){ my $q = threads->create(\&something_2, $_); $thr->{$_} = $q; } while (1) { foreach (keys %$thr) { if ($thr->{$_}->is_joinable()){ $thr->{$_}->join(); delete $thr->{$_}; } } print "trying:". (scalar keys %$thr)."\n"; last if not scalar keys %$thr; sleep 1; } } sub something_2 { my $a = shift; my $pid = fork(); if ($pid==0) { print "cocot $a\n"; exit(0); } else { waitpid($pid, 0); print "done $a\n"; } } # my $q = threads->create(\&something_1); something_1;