isStop = true; } /** * @return bool */ public function checkProcessIsStop(): bool { return $this->isStop === true; } /** * @param Process $process */ public function signListen(Process $process): void { // if (Coroutine::getCid() === -1) { // Process::signal(SIGTERM | SIGKILL, function ($signo) use ($process) { // if ($signo) { // $lists = Kiri::app()->getProcess(); // foreach ($lists as $process) { // $process->exit(0); // } // } // }); // } else { // Coroutine::create(function () use ($process) { // /** @var Coroutine\Socket $message */ // $message = $process->exportSocket(); // if ($message->recv() == 0x03455343213212) { // $this->waiteExit($process); // } // }); // Coroutine::create(function () use ($process) { // $data = Coroutine::waitSignal(SIGTERM | SIGKILL, -1); // if ($data) { // $lists = Kiri::app()->getProcess(); // foreach ($lists as $name => $process) { // foreach ($process as $item) { // /** @var Coroutine\Socket $export */ // $export = $item->exportSocket(); // $export->send(0x03455343213212); // } // } // } // }); // } } /** * */ protected function exit(): void { putenv('process.status=idle'); } /** * @return bool */ #[Pure] public function isWorking(): bool { return env('process.status', 'working') == 'working'; } /** * */ private function waiteExit(Process $process): void { $this->onProcessStop(); while ($this->isWorking()) { $this->sleep(); } $process->exit(0); } /** * */ private function sleep(): void { if ($this->enableSwooleCoroutine) { Coroutine::sleep(0.1); } else { usleep(100); } } }