Commit 189397df authored by Anthony Martin's avatar Anthony Martin

os: relax the way we kill processes on Plan 9

Previously, we wrote "kill" to the process control file
to kill a program. This is problematic because it doesn't
let the program gracefully exit.

This matters especially if the process we're killing is a
Go program. On Unix, sending SIGKILL to a Go program will
automatically kill all runtime threads. On Plan 9, there
are no threads so when the program wants to exit it has to
somehow signal all of the runtime processes. It can't do
this if we mercilessly kill it by writing to it's control
file.

Instead, we now send it a note to invoke it's note handler
and let it perform any cleanup before exiting.

LGTM=rsc
R=rsc, 0intro
CC=golang-codereviews
https://golang.org/cl/74440044
parent 8303a13b
......@@ -52,10 +52,6 @@ func (p *Process) signal(sig Signal) error {
if p.done() {
return errors.New("os: process already finished")
}
if sig == Kill {
// Special-case the kill signal since it doesn't use /proc/$pid/note.
return p.Kill()
}
if e := p.writeProcFile("note", sig.String()); e != nil {
return NewSyscallError("signal", e)
}
......@@ -63,10 +59,7 @@ func (p *Process) signal(sig Signal) error {
}
func (p *Process) kill() error {
if e := p.writeProcFile("ctl", "kill"); e != nil {
return NewSyscallError("kill", e)
}
return nil
return p.signal(Kill)
}
func (p *Process) wait() (ps *ProcessState, err error) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment