code: public function destroy($maxWaitSecs = null) {
  		if ($maxWaitSecs === null) {
  			$maxWaitSecs = $this->child_timeout_sec;
  		}
  		if (!$this->created) {
  			throw new WorkerPoolException('The pool hasn\'t yet been created.');
  		}
  		$this->created = FALSE;
  
  		if ($this->parentPid === getmypid()) {
  			$maxWaitSecs = ((int)$maxWaitSecs) * 2;
  			if ($maxWaitSecs <= 1) {
  				$maxWaitSecs = 2;
  			}
  			// send the exit instruction
  			foreach ($this->workerProcesses as $processDetails) {
  				try {
  					$processDetails->getSocket()->send(array('cmd' => 'exit'));
  				} catch (\Exception $e) {
  				}
  			}
  			// wait up to 10 seconds
  			for ($i = 0; $i < $maxWaitSecs; $i++) {
  				usleep(500000); // 0.5 seconds
  				pcntl_signal_dispatch();
  				if ($this->workerPoolSize == 0) {
  					break;
  				}
  			}
  
  			// reset signals
  			foreach ($this->signals as $signo) {
  				pcntl_signal($signo, SIG_DFL);
  			}
  
  			// kill all remaining processes
  			$this->workerProcesses->killAllProcesses();
  
  			usleep(500000); // 0.5 seconds
  			// reap the remaining signals
  			$this->reaper();
  			// destroy the semaphore
  			$this->semaphore->destroy();
  
  			unset($this->workerProcesses);
  		}
  
  		return $this;
  	}
docs: Destroy the WorkerPool with all its children
  @param int $maxWaitSecs a timeout to wait for the children, before killing them
  @throws WorkerPoolException
  @return WorkerPool