From 949e21ee09376a92baa0ecaec2fbff13d07f7824 Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Mon, 7 Nov 2022 20:56:45 +0800 Subject: [PATCH] =?UTF-8?q?:bug:=20macOS=20=E7=AB=AF=E6=8A=A5=E9=94=99=20`?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E8=A2=AB=E9=94=81=E5=AE=9A`=20Fix?= =?UTF-8?q?=20https://github.com/siyuan-note/siyuan/issues/6492?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/server/serve.go | 44 +++++++++++++++++++++++++++++++++++------- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/kernel/server/serve.go b/kernel/server/serve.go index 2cce8f2c0..74cf93539 100644 --- a/kernel/server/serve.go +++ b/kernel/server/serve.go @@ -78,8 +78,7 @@ func Serve(fastMode bool) { api.ServeAPI(ginServer) if !fastMode { - // 杀掉占用 6806 的已有内核进程 - killByPort(util.FixedPort) + killRunningKernel() } var host string @@ -460,6 +459,37 @@ func corsMiddleware() gin.HandlerFunc { } } +func killRunningKernel() { + if "dev" == util.Mode { + return + } + + if util.ContainerStd != util.Container { + return + } + + processes, err := goPS.Processes() + if nil != err { + logging.LogErrorf("get processes failed: %s", err) + killByPort(util.FixedPort) + return + } + + killed := false + for _, process := range processes { + procName := strings.ToLower(process.Executable()) + if strings.Contains(procName, "siyuan-kernel") { + kill(fmt.Sprintf("%d", process.Pid())) + killed = true + } + } + + if killed { + portJSON := filepath.Join(util.HomeDir, ".config", "siyuan", "port.json") + os.RemoveAll(portJSON) + } +} + func killByPort(port string) { if !isPortOpen(port) { return @@ -497,14 +527,14 @@ func isPortOpen(port string) bool { } func kill(pid string) { - var kill *exec.Cmd + var killCmd *exec.Cmd if gulu.OS.IsWindows() { - kill = exec.Command("cmd", "/c", "TASKKILL /F /PID "+pid) + killCmd = exec.Command("cmd", "/c", "TASKKILL /F /PID "+pid) } else { - kill = exec.Command("kill", "-9", pid) + killCmd = exec.Command("kill", "-9", pid) } - gulu.CmdAttr(kill) - kill.CombinedOutput() + gulu.CmdAttr(killCmd) + killCmd.CombinedOutput() } func pidByPort(port string) (ret string) {