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:
parent
e65c543f3c
commit
6728118e0a
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user