aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAnthony Martin <ality@pbrane.org>2014-03-12 18:12:56 -0700
committerAnthony Martin <ality@pbrane.org>2014-03-12 18:12:56 -0700
commit189397df5855a35cd23c76becf5cd16b10bb4dce (patch)
tree86d881c6e0ec921eb228e4e3104692ffe03ed7b5 /src
parent8303a13bb8e46a11c64080f4da1b6c9ed11ac5a2 (diff)
downloadgo-189397df5855a35cd23c76becf5cd16b10bb4dce.tar.xz
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
Diffstat (limited to 'src')
-rw-r--r--src/pkg/os/exec_plan9.go9
1 files changed, 1 insertions, 8 deletions
diff --git a/src/pkg/os/exec_plan9.go b/src/pkg/os/exec_plan9.go
index 2bd5b6888d..676be36ac7 100644
--- a/src/pkg/os/exec_plan9.go
+++ b/src/pkg/os/exec_plan9.go
@@ -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) {