What version of Go are you using (go version)?
go version go1.13.5 linux/amd64
Does this issue reproduce with the latest release?
Yes indeed.
What operating system and processor architecture are you using (go env)?
linux on amd64
What did you do?
Run the code below:
package main
import (
"fmt"
"os/exec"
"time"
)
func main() {
p := exec.Command("/usr/bin/yes")
if err := p.Start(); err != nil {
panic(err)
}
if err := p.Process.Kill(); err != nil {
panic(err)
}
fmt.Println("yes is now a zombie process")
time.Sleep(10 * time.Second)
if err := p.Process.Release(); err != nil {
panic(err)
}
fmt.Println("yes remains a zombie process")
time.Sleep(10 * time.Second)
}
What did you expect to see?
The documentation of Process.Release states:
Release releases any resources associated with the Process p, rendering it unusable in the future. Release only needs to be called if Wait is not.
It leaves a false impression that caller should invoke Release() if the caller does not intend to consume the process exit status - "... only needs to be called if Wait is not", even though doing so leaves a zombie process on the system.
Please clarify that Release() is not intended to replace Wait() at all in the function's description.
What version of Go are you using (
go version)?Does this issue reproduce with the latest release?
Yes indeed.
What operating system and processor architecture are you using (
go env)?linux on amd64
What did you do?
Run the code below:
package main import ( "fmt" "os/exec" "time" ) func main() { p := exec.Command("/usr/bin/yes") if err := p.Start(); err != nil { panic(err) } if err := p.Process.Kill(); err != nil { panic(err) } fmt.Println("yes is now a zombie process") time.Sleep(10 * time.Second) if err := p.Process.Release(); err != nil { panic(err) } fmt.Println("yes remains a zombie process") time.Sleep(10 * time.Second) }What did you expect to see?
The documentation of Process.Release states:
It leaves a false impression that caller should invoke
Release()if the caller does not intend to consume the process exit status - "... only needs to be called if Wait is not", even though doing so leaves a zombie process on the system.Please clarify that
Release()is not intended to replaceWait()at all in the function's description.