From 1359046a3669552d2dcc0c1cb190f2b834c7b202 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Thu, 17 Jul 2025 21:35:21 +0200 Subject: [PATCH] pkg/process: call out that "Zombie" is only supported on Linux Signed-off-by: Sebastiaan van Stijn --- pkg/process/process_linux.go | 24 ++++++++++++++++++++++++ pkg/process/process_nolinux.go | 7 +++++++ pkg/process/process_unix.go | 19 +++---------------- 3 files changed, 34 insertions(+), 16 deletions(-) create mode 100644 pkg/process/process_linux.go create mode 100644 pkg/process/process_nolinux.go diff --git a/pkg/process/process_linux.go b/pkg/process/process_linux.go new file mode 100644 index 0000000000..b7ce46e675 --- /dev/null +++ b/pkg/process/process_linux.go @@ -0,0 +1,24 @@ +package process + +import ( + "bytes" + "fmt" + "os" +) + +func zombie(pid int) (bool, error) { + if pid < 1 { + return false, nil + } + data, err := os.ReadFile(fmt.Sprintf("/proc/%d/stat", pid)) + if err != nil { + if os.IsNotExist(err) { + return false, nil + } + return false, err + } + if cols := bytes.SplitN(data, []byte(" "), 4); len(cols) >= 3 && string(cols[2]) == "Z" { + return true, nil + } + return false, nil +} diff --git a/pkg/process/process_nolinux.go b/pkg/process/process_nolinux.go new file mode 100644 index 0000000000..7e58cb8eb3 --- /dev/null +++ b/pkg/process/process_nolinux.go @@ -0,0 +1,7 @@ +//go:build !linux + +package process + +func zombie(pid int) (bool, error) { + return false, nil +} diff --git a/pkg/process/process_unix.go b/pkg/process/process_unix.go index 43eabb5794..c0d3ab2fa5 100644 --- a/pkg/process/process_unix.go +++ b/pkg/process/process_unix.go @@ -3,9 +3,7 @@ package process import ( - "bytes" "errors" - "fmt" "os" "path/filepath" "runtime" @@ -47,20 +45,9 @@ func kill(pid int) error { // a PID larger than 1), and negative (-n, all processes in process group "n") // values for pid are ignored. Refer to [PROC(5)] for details. // +// Zombie is only implemented on Linux, and returns false on all other platforms. +// // [PROC(5)]: https://man7.org/linux/man-pages/man5/proc.5.html func Zombie(pid int) (bool, error) { - if pid < 1 { - return false, nil - } - data, err := os.ReadFile(fmt.Sprintf("/proc/%d/stat", pid)) - if err != nil { - if os.IsNotExist(err) { - return false, nil - } - return false, err - } - if cols := bytes.SplitN(data, []byte(" "), 4); len(cols) >= 3 && string(cols[2]) == "Z" { - return true, nil - } - return false, nil + return zombie(pid) }