code: public function run($input) {
  		while ($this->workerPoolSize > 0) {
  			try {
  				$processDetailsOfFreeWorker = $this->getNextFreeWorker();
  				$processDetailsOfFreeWorker->getSocket()->send(array('cmd' => 'run', 'data' => $input));
  				return $processDetailsOfFreeWorker->getPid();
  			} catch (\Exception $e) {
  				pcntl_signal_dispatch();
  			}
  		}
  		throw new WorkerPoolException('Unable to run the task.');
  	}
docs: Sends the input to the next free worker process
  
  This function blocks until a worker has finished its work.
  You can kill all child processes, so that the parent will be unblocked.
  @param mixed $input any serializable value
  @throws WorkerPoolException
  @return int The PID of the processing worker process