From 1f8d2a9d564585ada49d60160053952af4828aba Mon Sep 17 00:00:00 2001 From: Denis Vaumoron Date: Fri, 5 Apr 2024 16:06:58 +0200 Subject: [PATCH] transmit increasing signal #95 (#97) Signed-off-by: Denis Vaumoron --- versionmanager/proxy/proxy.go | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/versionmanager/proxy/proxy.go b/versionmanager/proxy/proxy.go index 15ce99e6..9bd297d9 100644 --- a/versionmanager/proxy/proxy.go +++ b/versionmanager/proxy/proxy.go @@ -24,6 +24,7 @@ import ( "math/rand" "os" "os/exec" + "os/signal" "path/filepath" "strconv" "strings" @@ -74,7 +75,17 @@ func RunCmd(installPath string, detectedVersion string, execName string) { done(calledExitCode) }() - if err = cmd.Run(); err != nil { + if err = cmd.Start(); err != nil { + exitWithErrorMsg(execName, err, &exitCode) + + return + } + + signalChan := make(chan os.Signal) + signal.Notify(signalChan, os.Interrupt) + go transmitIncreasingSignal(signalChan, cmd.Process) + + if err = cmd.Wait(); err != nil { if exitError, ok := err.(*exec.ExitError); ok { calledExitCode = exitError.ExitCode() @@ -153,6 +164,18 @@ func initIO(cmd *exec.Cmd, execName string, pExitCode *int) (func(int), error) { }, nil } +func transmitIncreasingSignal(signalReceiver <-chan os.Signal, process *os.Process) { + first := true + for range signalReceiver { + if first { + process.Signal(os.Interrupt) + first = false + } else { + process.Signal(os.Kill) + } + } +} + func writeMultiline(file *os.File, key string, value string) error { delimiter := "ghadelimeter_" + strconv.Itoa(rand.Int()) if strings.Contains(key, delimiter) || strings.Contains(value, delimiter) {