#!/usr/bin/perl use feature qw/say/; my $count = 1; CLIENT: for my $i (1..33){ if ( $count > 10 ) { say "waiting for open process"; while (1) { if ( wait() ){ $count = 1; redo CLIENT; } } } else{ # Stagger the initiating to help CPU sleep(5); } $count++ and next if( my $pid = fork() ); unless( $pid ){ say "Processing client $i process count $count"; # Emulate the time it would take to process.. sleep(60); exit; } } #### Processing client 1 process count 1 Processing client 2 process count 2 waiting for open process Processing client 3 process count 3 Processing client 4 process count 4 Processing client 5 process count 5 Processing client 6 process count 6 Processing client 7 process count 7 Processing client 8 process count 8 Processing client 9 process count 9 Processing client 10 process count 10 waiting for open process Processing client 11 process count 1 Processing client 12 process count 2 Processing client 13 process count 3 Processing client 14 process count 4 Processing client 15 process count 5 Processing client 16 process count 6 Processing client 17 process count 7 Processing client 18 process count 8 Processing client 19 process count 9 waiting for open process Processing client 20 process count 10 Processing client 21 process count 1 Processing client 22 process count 2 Processing client 23 process count 3 Processing client 24 process count 4 Processing client 25 process count 5 Processing client 26 process count 6 Processing client 27 process count 7 Processing client 28 process count 8 Processing client 29 process count 9 Processing client 30 process count 10 Processing client 31 process count 1 Processing client 32 process count 2 Processing client 33 process count 3