fix(exe): fix timeout of OSRunner.Capture()

kill all child processes
This commit is contained in:
ccat3z 2020-12-10 15:29:35 +08:00 committed by J Guerreiro
parent 182f4c7f6c
commit bb50b4079f

View file

@ -6,6 +6,7 @@ import (
"os"
"os/exec"
"strings"
"syscall"
"time"
"github.com/Jguer/yay/v10/pkg/text"
@ -35,6 +36,8 @@ func (r *OSRunner) Capture(cmd *exec.Cmd, timeout int64) (stdout, stderr string,
cmd.Stdout = &outbuf
cmd.Stderr = &errbuf
cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true}
err = cmd.Start()
if err != nil {
stdout = strings.TrimSpace(outbuf.String())
@ -44,7 +47,7 @@ func (r *OSRunner) Capture(cmd *exec.Cmd, timeout int64) (stdout, stderr string,
if timeout != 0 {
timer = time.AfterFunc(time.Duration(timeout)*time.Second, func() {
err = cmd.Process.Kill()
err = syscall.Kill(-cmd.Process.Pid, syscall.SIGKILL)
if err != nil {
text.Errorln(err)
}