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