Skip to content

Commit

Permalink
os/exec: document method to check if a process is alive
Browse files Browse the repository at this point in the history
  • Loading branch information
mpldr committed Jun 16, 2023
1 parent b0e1707 commit 4c9e2bf
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 1 deletion.
4 changes: 3 additions & 1 deletion src/os/exec.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,9 @@ func Getppid() int { return syscall.Getppid() }
// about the underlying operating system process.
//
// On Unix systems, FindProcess always succeeds and returns a Process
// for the given pid, regardless of whether the process exists.
// for the given pid, regardless of whether the process exists. To test whether
// the process actually exists, see whether p.Signal(syscall.Signal(0)) reports
// an error.
func FindProcess(pid int) (*Process, error) {
return findProcess(pid)
}
Expand Down
18 changes: 18 additions & 0 deletions src/os/exec_unix_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ package os_test
import (
"internal/testenv"
. "os"
"syscall"
"testing"
)

Expand All @@ -25,3 +26,20 @@ func TestErrProcessDone(t *testing.T) {
t.Errorf("got %v want %v", got, ErrProcessDone)
}
}

func TestUNIXProcessAlive(t *testing.T) {
testenv.MustHaveGoBuild(t)
t.Parallel()

p, err := StartProcess(testenv.GoToolPath(t), []string{"sleep", "1"}, &ProcAttr{})
if err != nil {
t.Skipf("starting test process: %v", err)
}
defer p.Kill()

proc, _ := FindProcess(p.Pid)
err = proc.Signal(syscall.Signal(0))
if err != nil {
t.Fail()
}
}

0 comments on commit 4c9e2bf

Please sign in to comment.