From 6a5617dcc1433e0982e331fb16ce114abe996c5b Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Thu, 9 Feb 2023 16:46:20 +0800 Subject: [PATCH] =?UTF-8?q?:bug:=20=E6=A1=8C=E9=9D=A2=E7=AB=AF=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E7=9D=A1=E7=9C=A0=E5=94=A4=E9=86=92=E5=90=8E=E5=86=85?= =?UTF-8?q?=E6=A0=B8=E5=8F=AF=E8=83=BD=E4=BC=9A=E8=87=AA=E5=8A=A8=E9=80=80?= =?UTF-8?q?=E5=87=BA=20Fix=20https://github.com/siyuan-note/siyuan/issues/?= =?UTF-8?q?7314?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/model/process.go | 83 +++++++++++++++++++++++------------------ 1 file changed, 46 insertions(+), 37 deletions(-) diff --git a/kernel/model/process.go b/kernel/model/process.go index f6937203a..ba8bd70d9 100644 --- a/kernel/model/process.go +++ b/kernel/model/process.go @@ -39,7 +39,6 @@ func HandleSignal() { var ( firstRunHookDesktopUIProcJob = true - noUIProcCount int ) func HookDesktopUIProcJob() { @@ -59,12 +58,34 @@ func HookDesktopUIProcJob() { return } - uiProcNames := []string{"siyuan", "electron"} - uiProcessCount := 0 - util.UIProcessIDs.Range(func(uiProcIDArg, _ interface{}) bool { - // 从 UI 进程 ID 列表中找到 UI 进程 + uiProcCount := getAttachedUIProcCount() + if 0 < uiProcCount { + return + } - uiProcessCount++ + logging.LogWarnf("no active UI proc, continue to check from attached ui processes after 15s") + time.Sleep(15 * time.Second) + uiProcCount = getAttachedUIProcCount() + if 0 < uiProcCount { + return + } + logging.LogWarnf("no active UI proc, continue to check from all processes after 15s") + time.Sleep(15 * time.Second) + uiProcCount = getUIProcCount() + if 0 < uiProcCount { + logging.LogInfof("active UI proc count [%d]", uiProcCount) + return + } + + logging.LogWarnf("confirmed no active UI proc, exit kernel process now") + Close(false, 1) +} + +var uiProcNames = []string{"siyuan", "electron"} + +// getAttachedUIProcCount 获取已经附加的 UI 进程数。 +func getAttachedUIProcCount() (ret int) { + util.UIProcessIDs.Range(func(uiProcIDArg, _ interface{}) bool { uiProcID, err := strconv.Atoi(uiProcIDArg.(string)) if nil != err { logging.LogErrorf("invalid UI proc ID [%s]: %s", uiProcIDArg, err) @@ -78,7 +99,6 @@ func HookDesktopUIProcJob() { } if nil == proc { - noUIProcCount++ return true } @@ -87,37 +107,26 @@ func HookDesktopUIProcJob() { for _, name := range uiProcNames { uiProcOk = strings.Contains(procName, name) } - if !uiProcOk { - noUIProcCount++ + if uiProcOk { + ret++ } return true }) - - if 1 > uiProcessCount { - // 如果 UI 进程 ID 列表中没有找到 UI 进程则从完整的进程列表中找 - procs, _ := goPS.Processes() - for _, proc := range procs { - procName := strings.ToLower(proc.Executable()) - uiProcOk := false - for _, name := range uiProcNames { - uiProcOk = strings.Contains(procName, name) - } - if uiProcOk { - uiProcessCount++ - break - } - } - - if 1 > uiProcessCount { - noUIProcCount++ - } - } - - if 0 < noUIProcCount { - logging.LogInfof("no active UI proc count [%d]", noUIProcCount) - if 1 < noUIProcCount { - logging.LogInfof("confirmed no active UI proc, exit kernel process now") - Close(false, 1) - } - } + return +} + +// getUIProcCount 获取 UI 进程数。 +func getUIProcCount() (ret int) { + procs, _ := goPS.Processes() + for _, proc := range procs { + procName := strings.ToLower(proc.Executable()) + uiProcOk := false + for _, name := range uiProcNames { + uiProcOk = strings.Contains(procName, name) + } + if uiProcOk { + ret++ + } + } + return }