/** * @throws ProcessExitHandlerException */ public function check() { $pid = $this->getProcessControl()->wait($status, WNOHANG); if (0 === $pid) { return; } elseif (-1 === $pid) { if (10 !== $this->getProcessControl()->getLastError()) { throw new ProcessExitHandlerException('pcntl_wait: ' . $this->getProcessControl()->getStringError($this->getProcessControl()->getLastError())); } } $processExit = new ProcessExit($pid, $status); foreach ($this->getHandlers() as $handler) { if ($processExit->isPropagationStopped()) { break; } call_user_func($handler, $processExit); } }
/** * @inheritDoc */ public function onProcessExit(ProcessExit $processExit) { $pid = $processExit->getPid(); if (false === $this->hasSubTask($pid)) { return; } $this->removeSubTask($pid); $processExit->stopPropagation(); }
/** * @param int $pid * @param int $status * * @return ProcessExit */ public function getProcessExit($pid, $status) { $processExit = new ProcessExit($pid, $status); $processExit->setProcessControl($this->processControl); return $processExit; }