refactor: Extract processExists to util.ProcessExists (gt-560ge)

Move duplicated processExists function to shared util package:
- Create internal/util/process.go with ProcessExists function
- Add internal/util/process_test.go with basic tests
- Update witness/manager.go to use util.ProcessExists
- Update refinery/manager.go to use util.ProcessExists
- Remove local processExists functions from both files

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Steve Yegge
2025-12-28 16:14:11 -08:00
parent 2f38e73058
commit 5e7c5b4728
4 changed files with 42 additions and 24 deletions

13
internal/util/process.go Normal file
View File

@@ -0,0 +1,13 @@
package util
import "os"
// ProcessExists checks if a process with the given PID exists.
// It uses the Unix convention of sending signal 0 to test for process existence.
func ProcessExists(pid int) bool {
proc, err := os.FindProcess(pid)
if err != nil {
return false
}
return proc.Signal(nil) == nil
}

View File

@@ -0,0 +1,25 @@
package util
import (
"testing"
)
func TestProcessExistsNonExistent(t *testing.T) {
// Using a very high PID that's unlikely to exist
pid := 999999999
if ProcessExists(pid) {
t.Errorf("ProcessExists(%d) = true, want false for non-existent process", pid)
}
}
func TestProcessExistsNegativePID(t *testing.T) {
// Negative PIDs are invalid and should return false or may cause errors
// depending on the platform, so just test that it doesn't panic
_ = ProcessExists(-1)
}
func TestProcessExistsZero(t *testing.T) {
// PID 0 is special (kernel process on Unix)
// Test that we can call it without panicking
_ = ProcessExists(0)
}