31 lines
594 B
Go
31 lines
594 B
Go
|
package lockfile
|
||
|
|
||
|
import (
|
||
|
"syscall"
|
||
|
)
|
||
|
|
||
|
//For some reason these consts don't exist in syscall.
|
||
|
const (
|
||
|
error_invalid_parameter = 87
|
||
|
code_still_active = 259
|
||
|
)
|
||
|
|
||
|
func isRunning(pid int) (bool, error) {
|
||
|
procHnd, err := syscall.OpenProcess(syscall.PROCESS_QUERY_INFORMATION, true, uint32(pid))
|
||
|
if err != nil {
|
||
|
if scerr, ok := err.(syscall.Errno); ok {
|
||
|
if uintptr(scerr) == error_invalid_parameter {
|
||
|
return false, nil
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
var code uint32
|
||
|
err = syscall.GetExitCodeProcess(procHnd, &code)
|
||
|
if err != nil {
|
||
|
return false, err
|
||
|
}
|
||
|
|
||
|
return code == code_still_active, nil
|
||
|
}
|