diff options
Diffstat (limited to 'src/pkg/os/exec_windows.go')
-rw-r--r-- | src/pkg/os/exec_windows.go | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/pkg/os/exec_windows.go b/src/pkg/os/exec_windows.go index 4aa2ade63..c4f3d4f85 100644 --- a/src/pkg/os/exec_windows.go +++ b/src/pkg/os/exec_windows.go @@ -42,13 +42,22 @@ func (p *Process) wait() (ps *ProcessState, err error) { return &ProcessState{p.Pid, syscall.WaitStatus{ExitCode: ec}, &u}, nil } +func terminateProcess(pid, exitcode int) error { + h, e := syscall.OpenProcess(syscall.PROCESS_TERMINATE, false, uint32(pid)) + if e != nil { + return NewSyscallError("OpenProcess", e) + } + defer syscall.CloseHandle(h) + e = syscall.TerminateProcess(h, uint32(exitcode)) + return NewSyscallError("TerminateProcess", e) +} + func (p *Process) signal(sig Signal) error { if p.done() { return errors.New("os: process already finished") } if sig == Kill { - e := syscall.TerminateProcess(syscall.Handle(p.handle), 1) - return NewSyscallError("TerminateProcess", e) + return terminateProcess(p.Pid, 1) } // TODO(rsc): Handle Interrupt too? return syscall.Errno(syscall.EWINDOWS) |