diff --git a/Abstracts/FileWatcher.php b/Abstracts/FileWatcher.php index 0f1939f..5f623d4 100644 --- a/Abstracts/FileWatcher.php +++ b/Abstracts/FileWatcher.php @@ -307,7 +307,7 @@ class FileWatcher extends AbstractProcess implements OnProcessInterface } if (!$this->reloadWorkers()) { - di(StdoutLogger::class)->println('reload server failed: master pid not found or signal failed'); + di(StdoutLogger::class)->println('reload server failed: Server->reload() failed, and master pid fallback not found or signal failed'); } } finally { $this->reloading = false; diff --git a/Abstracts/HotReload.php b/Abstracts/HotReload.php index ef46db4..fa23fb4 100644 --- a/Abstracts/HotReload.php +++ b/Abstracts/HotReload.php @@ -128,7 +128,7 @@ class HotReload extends AbstractProcess $this->clear(); if (!$this->reloadWorkers()) { - di(StdoutLogger::class)->println('reload server failed: master pid not found or signal failed'); + di(StdoutLogger::class)->println('reload server failed: Server->reload() failed, and master pid fallback not found or signal failed'); } $this->addListen(); diff --git a/Abstracts/ReloadWorkers.php b/Abstracts/ReloadWorkers.php index 4daba24..c58e3c3 100644 --- a/Abstracts/ReloadWorkers.php +++ b/Abstracts/ReloadWorkers.php @@ -14,6 +14,10 @@ trait ReloadWorkers */ private function reloadWorkers(): bool { + if ($this->reloadByServerInstance()) { + return true; + } + $pid = $this->getMasterPid(); if ($pid === null) { return false; @@ -22,6 +26,25 @@ trait ReloadWorkers return Process::kill($pid, SIGUSR1); } + private function reloadByServerInstance(): bool + { + try { + $server = function_exists('di') ? di(\Kiri\Server\ServerInterface::class) : null; + } catch (\Throwable) { + return false; + } + + if (!is_object($server) || !method_exists($server, 'reload')) { + return false; + } + + try { + return $server->reload() !== false; + } catch (\Throwable) { + return false; + } + } + private function getMasterPid(): ?int { if (self::$cachedMasterPid !== null && $this->isCachedMasterPid(self::$cachedMasterPid)) {