1package lockfile 2 3import ( 4 "syscall" 5) 6 7//For some reason these consts don't exist in syscall. 8const ( 9 error_invalid_parameter = 87 10 code_still_active = 259 11) 12 13func isRunning(pid int) (bool, error) { 14 procHnd, err := syscall.OpenProcess(syscall.PROCESS_QUERY_INFORMATION, true, uint32(pid)) 15 if err != nil { 16 if scerr, ok := err.(syscall.Errno); ok { 17 if uintptr(scerr) == error_invalid_parameter { 18 return false, nil 19 } 20 } 21 } 22 23 var code uint32 24 err = syscall.GetExitCodeProcess(procHnd, &code) 25 if err != nil { 26 return false, err 27 } 28 29 return code == code_still_active, nil 30} 31