mirror of https://github.com/containers/podman.git
44 lines
919 B
Go
44 lines
919 B
Go
//go:build windows
|
|
// +build windows
|
|
|
|
package machine
|
|
|
|
import (
|
|
"os"
|
|
"syscall"
|
|
"time"
|
|
)
|
|
|
|
func GetProcessState(pid int) (active bool, exitCode int) {
|
|
const da = syscall.STANDARD_RIGHTS_READ | syscall.PROCESS_QUERY_INFORMATION | syscall.SYNCHRONIZE
|
|
handle, err := syscall.OpenProcess(da, false, uint32(pid))
|
|
if err != nil {
|
|
return false, int(syscall.ERROR_PROC_NOT_FOUND)
|
|
}
|
|
|
|
var code uint32
|
|
syscall.GetExitCodeProcess(handle, &code)
|
|
return code == 259, int(code)
|
|
}
|
|
|
|
func PipeNameAvailable(pipeName string) bool {
|
|
_, err := os.Stat(`\\.\pipe\` + pipeName)
|
|
return os.IsNotExist(err)
|
|
}
|
|
|
|
func WaitPipeExists(pipeName string, retries int, checkFailure func() error) error {
|
|
var err error
|
|
for i := 0; i < retries; i++ {
|
|
_, err = os.Stat(`\\.\pipe\` + pipeName)
|
|
if err == nil {
|
|
break
|
|
}
|
|
if fail := checkFailure(); fail != nil {
|
|
return fail
|
|
}
|
|
time.Sleep(250 * time.Millisecond)
|
|
}
|
|
|
|
return err
|
|
}
|