Fix a runtime deadlock as well as fixing some graceful exiting issues (#945)

This commit is contained in:
Asim Aslam
2019-11-14 14:26:21 +00:00
committed by GitHub
parent 16754a7477
commit 383658edf2
3 changed files with 55 additions and 9 deletions

View File

@@ -6,6 +6,7 @@ import (
"os"
"os/exec"
"strconv"
"syscall"
"github.com/micro/go-micro/runtime/process"
)
@@ -24,6 +25,9 @@ func (p *Process) Fork(exe *process.Executable) (*process.PID, error) {
// set env vars
cmd.Env = append(cmd.Env, exe.Env...)
// create process group
cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true}
in, err := cmd.StdinPipe()
if err != nil {
return nil, err
@@ -61,7 +65,16 @@ func (p *Process) Kill(pid *process.PID) error {
return err
}
return pr.Kill()
// now kill it
err = pr.Kill()
// kill the group
if pgid, err := syscall.Getpgid(id); err == nil {
syscall.Kill(-pgid, syscall.SIGKILL)
}
// return the kill error
return err
}
func (p *Process) Wait(pid *process.PID) error {