1
0
mirror of https://github.com/golang/go synced 2024-11-11 20:01:37 -07:00

cmd/go: pass signals forward during "go tool"

This way, if a SIGINT is sent to the go command,
it is forwarded on to the underlying tool.

Otherwise trying to use os.Process.Signal to kill
"go tool compile" only kills the "go tool" not the "compile".

Change-Id: Iac7cd4f06096469f5e76164df813a379c0da3822
Reviewed-on: https://go-review.googlesource.com/c/go/+/282312
Trust: Russ Cox <rsc@golang.org>
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
This commit is contained in:
Russ Cox 2021-01-07 11:21:37 -05:00
parent e65c543f3c
commit 6728118e0a

View File

@ -10,6 +10,7 @@ import (
"fmt"
"os"
"os/exec"
"os/signal"
"sort"
"strings"
@ -85,7 +86,19 @@ func runTool(ctx context.Context, cmd *base.Command, args []string) {
Stdout: os.Stdout,
Stderr: os.Stderr,
}
err := toolCmd.Run()
err := toolCmd.Start()
if err == nil {
c := make(chan os.Signal, 100)
signal.Notify(c)
go func() {
for sig := range c {
toolCmd.Process.Signal(sig)
}
}()
err = toolCmd.Wait()
signal.Stop(c)
close(c)
}
if err != nil {
// Only print about the exit status if the command
// didn't even run (not an ExitError) or it didn't exit cleanly