¿Cómo limitar los procesos hijo de PHP?

Tengo un script PHP que crea unos 50 procesos hijos. Todos estos procesos se ejecutan en simultáneo, por lo que están consumiendo casi todos mis recursos (espacio en disco, RAM y principalmente CPU).

He intentado optimizarlo, pero es imposible, creo que la única forma es controlar los procesos hijos para:

  • Limitar los recursos que utiliza cada proceso
  • Limitar la cantidad a 10 procesos y cuando finalice uno se ejecuté otro.

Actualmente el código es el siguiente:

$  parent_pid = getmypid(); foreach($  competitors as $  competitor) {     if(getmypid() == $  parent_pid) //Si estamos en el proceso padre     {         $  pid = pcntl_fork(); //Creo un proceso hijo         if($  pid == 0) //Si es hijo         {             //Mi lógica             register_shutdown_function(create_function('$  pars', 'posix_kill(getmypid(), SIGKILL);'), array());             exit();         }     } } while(pcntl_waitpid(0, $  status) != -1); //Después que mueran todos los hijos 

¿Cómo podría poner a la espera los 40 procesos hijos restantes, y detectar cuando uno finalice para que en la cola de espera queden 39 y así sucesivamente?