mirror of
https://github.com/sipeed/picoclaw.git
synced 2026-06-12 18:08:54 +00:00
7bf6cbe1fa
- treat `EPERM` from `signal(0)` as “process exists” on Unix - classify malformed PID files as invalid and auto-remove them during read - keep cached `pidData` only for transient races and downgrade `running` to `stopped` when the tracked process is gone - refresh PID data on WebSocket proxy requests and reject stale cached gateway state - add regression tests for invalid PID files, status downgrade, on-demand PID loading, and stale proxy rejection
30 lines
621 B
Go
30 lines
621 B
Go
//go:build !windows
|
|
|
|
package pid
|
|
|
|
import (
|
|
"errors"
|
|
"os"
|
|
"syscall"
|
|
)
|
|
|
|
// isProcessRunning checks whether a process with the given PID is alive
|
|
// on Unix-like systems using signal(0).
|
|
func isProcessRunning(pid int) bool {
|
|
if pid <= 0 {
|
|
return false
|
|
}
|
|
p, err := os.FindProcess(pid)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
// Signal(nil) does not kill the process but checks existence on Unix.
|
|
err = p.Signal(syscall.Signal(0))
|
|
if err == nil {
|
|
return true
|
|
}
|
|
var errno syscall.Errno
|
|
// EPERM means the process exists but we are not allowed to signal it.
|
|
return errors.As(err, &errno) && errno == syscall.EPERM
|
|
}
|