From c812f9c11013c9be221336878d9907c0f562d580 Mon Sep 17 00:00:00 2001 From: "as2252258@163.com" Date: Mon, 26 Jul 2021 03:45:46 +0800 Subject: [PATCH] modify --- Server/ServerManager.php | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) 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