From 4b62a9450abddfe220fd997583533dd391b524bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Mur=C3=A9?= Date: Sat, 4 Mar 2023 15:22:36 +0100 Subject: [PATCH] util: better IsRunning(pid) --- util/process/process.go | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/util/process/process.go b/util/process/process.go index f3bcb7f2..e3f47282 100644 --- a/util/process/process.go +++ b/util/process/process.go @@ -9,15 +9,25 @@ import ( func IsRunning(pid int) bool { // never return no error in a unix system process, err := os.FindProcess(pid) - if err != nil { return false } // Signal 0 doesn't do anything but allow testing the process err = process.Signal(syscall.Signal(0)) - - // Todo: distinguish "you don't have access" and "process doesn't exist" - - return err == nil + if err == nil { + return true + } + if err.Error() == "os: process already finished" { + return false + } + if errno, ok := err.(syscall.Errno); ok { + switch errno { + case syscall.ESRCH: + return false + case syscall.EPERM: + return true + } + } + return false }