package main
import (
"fmt"
"os"
"syscall"
)
func main() {
p := &os.Process{Pid: os.Getpid()}
err := p.Signal(syscall.SIGWINCH)
fmt.Println("error:", err)
}
With 1.22 this works without issue. As of https://go.dev/cl/570036, this prints error: bad file descriptor
.
The problem is that 0 is a valid value of os.Process.handle
, so the Signal
method tries to use it as a pidfd.
This is easy to fix with an additional field to report whether handle
is initialized (N.B. that handle
could really be FD 0, so we can't just look for 0). I will send a CL.
(As far as I know, this form of using os.Process
has never worked on Windows, as it always uses the handle
field.)
cc @kolyshkin
Comment From: gopherbot
Change https://go.dev/cl/588675 mentions this issue: os: overhaul handling of PID vs pidfd within Process