diff options
author | Michael Muré <batolettre@gmail.com> | 2023-03-04 15:22:36 +0100 |
---|---|---|
committer | Michael Muré <batolettre@gmail.com> | 2023-03-04 15:22:36 +0100 |
commit | 4b62a9450abddfe220fd997583533dd391b524bc (patch) | |
tree | a77b01515608cba1efeb8fe76b79e081072bad02 /util/process | |
parent | 852380f2212a41342cb5440d13cf723ae50b61ea (diff) | |
download | git-bug-4b62a9450abddfe220fd997583533dd391b524bc.tar.gz |
util: better IsRunning(pid)
Diffstat (limited to 'util/process')
-rw-r--r-- | util/process/process.go | 20 |
1 files 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 } |