code: protected function getNextFreeWorker() {
  		$sec = 0;
  		while (TRUE) {
  			$this->collectWorkerResults($sec);
  
  			$freeProcess = $this->workerProcesses->takeFreeProcess();
  			if ($freeProcess !== NULL) {
  				return $freeProcess;
  			}
  
  			$sec = $this->child_timeout_sec;
  			if ($this->workerPoolSize <= 0) {
  				throw new WorkerPoolException('All workers were gone.');
  			}
  		}
  
  		return NULL;
  	}
docs: Get the pid of the next free worker
  
  This function blocks until a worker has finished its work.
  You can kill all child processes, so that the parent will be unblocked.
  @throws WorkerPoolException
  @return ProcessDetails the pid of the next free child