diff --git a/Server/ServerManager.php b/Server/ServerManager.php index 913886e6..e16b6b60 100644 --- a/Server/ServerManager.php +++ b/Server/ServerManager.php @@ -95,8 +95,7 @@ class ServerManager extends Abstracts\Server $context = ServerManager::getContext(); foreach ($this->sortService($configs['ports']) as $config) { if ($this->checkPort($config['port'])) { - $this->server->shutdown(); - trigger_error(sprintf('Port %s::%d is already.', $config['host'], $config['port'])); + $this->stopServer($config['port']); } $this->startListenerHandler($context, $config); } @@ -293,6 +292,25 @@ class ServerManager extends Abstracts\Server } + public function stopServer(int $port) + { + exec('netstat -lnp | grep ' . $port . ' | grep "LISTEN" | awk \'{print $7}\'', $output); + if (empty($output)) { + return; + } + + $explode = explode('/', $output); + + exec('kill -15 ' . $explode[0], $execResuklt); + while (true) { + exec('netstat -lnp | grep ' . $port . ' | grep "LISTEN" | awk \'{print $7}\'', $output); + if (empty($output)) { + return; + } + } + } + + /** * @param string $type * @param array $settings