blob: 496f5475d969af962ca6f81701013c2e1b802130 [file] [log] [blame]
package process
import (
"fmt"
"os"
"os/exec"
"runtime"
"testing"
)
func TestAlive(t *testing.T) {
for _, pid := range []int{0, -1, -123} {
t.Run(fmt.Sprintf("invalid process (%d)", pid), func(t *testing.T) {
if Alive(pid) {
t.Errorf("PID %d should not be alive", pid)
}
})
}
t.Run("current process", func(t *testing.T) {
if pid := os.Getpid(); !Alive(pid) {
t.Errorf("current PID (%d) should be alive", pid)
}
})
t.Run("exited process", func(t *testing.T) {
if runtime.GOOS == "windows" {
t.Skip("TODO: make this work on Windows")
}
// Get a PID of an exited process.
cmd := exec.Command("echo", "hello world")
err := cmd.Run()
if err != nil {
t.Fatal(err)
}
exitedPID := cmd.ProcessState.Pid()
if Alive(exitedPID) {
t.Errorf("PID %d should not be alive", exitedPID)
}
})
}