diff options
author | Arthur Sengileyev <arthur.sengileyev@gmail.com> | 2022-08-16 13:39:02 +0300 |
---|---|---|
committer | Arthur Sengileyev <arthur.sengileyev@gmail.com> | 2022-08-29 16:53:42 +0300 |
commit | c1480b39a9e993aaa74caabf6d5c8bb865b78784 (patch) | |
tree | de4ca58d0bd8ff2d327a544a775f367ed2ad8597 /pkg/machine/qemu/machine_unix.go | |
parent | 00b03db6f208614d7967f5dbd5c0281cc0bd6d23 (diff) | |
download | podman-c1480b39a9e993aaa74caabf6d5c8bb865b78784.tar.gz podman-c1480b39a9e993aaa74caabf6d5c8bb865b78784.tar.bz2 podman-c1480b39a9e993aaa74caabf6d5c8bb865b78784.zip |
Improved Windows compatibility for machine command
Signed-off-by: Arthur Sengileyev <arthur.sengileyev@gmail.com>
Diffstat (limited to 'pkg/machine/qemu/machine_unix.go')
-rw-r--r-- | pkg/machine/qemu/machine_unix.go | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/pkg/machine/qemu/machine_unix.go b/pkg/machine/qemu/machine_unix.go new file mode 100644 index 000000000..84ee191d1 --- /dev/null +++ b/pkg/machine/qemu/machine_unix.go @@ -0,0 +1,33 @@ +//go:build darwin || dragonfly || freebsd || linux || netbsd || openbsd +// +build darwin dragonfly freebsd linux netbsd openbsd + +package qemu + +import ( + "bytes" + "fmt" + "syscall" + + "golang.org/x/sys/unix" +) + +func isProcessAlive(pid int) bool { + err := unix.Kill(pid, syscall.Signal(0)) + if err == nil || err == unix.EPERM { + return true + } + return false +} + +func checkProcessStatus(processHint string, pid int, stderrBuf *bytes.Buffer) error { + var status syscall.WaitStatus + pid, err := syscall.Wait4(pid, &status, syscall.WNOHANG, nil) + if err != nil { + return fmt.Errorf("failed to read qem%su process status: %w", processHint, err) + } + if pid > 0 { + // child exited + return fmt.Errorf("%s exited unexpectedly with exit code %d, stderr: %s", processHint, status.ExitStatus(), stderrBuf.String()) + } + return nil +} |