Fix a runtime deadlock as well as fixing some graceful exiting issues (#945)
This commit is contained in:
@@ -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 {
|
||||
|
Reference in New Issue
Block a user