aboutsummaryrefslogtreecommitdiff
path: root/pkg/machine/qemu/machine_unix.go
diff options
context:
space:
mode:
authorArthur Sengileyev <arthur.sengileyev@gmail.com>2022-08-16 13:39:02 +0300
committerMatthew Heon <mheon@redhat.com>2022-09-06 15:03:42 -0400
commit7bb7908efaea76e9497a0c914fb29b0a3cdd5fff (patch)
tree35b09df817f0877908fcc7409690a852bdbe187f /pkg/machine/qemu/machine_unix.go
parent8634f55c75fff451d1190df01b74f9522aa5b6cf (diff)
downloadpodman-7bb7908efaea76e9497a0c914fb29b0a3cdd5fff.tar.gz
podman-7bb7908efaea76e9497a0c914fb29b0a3cdd5fff.tar.bz2
podman-7bb7908efaea76e9497a0c914fb29b0a3cdd5fff.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.go33
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
+}