diff --git a/tfexec/cmd.go b/tfexec/cmd.go index 83abd22d..1557b52a 100644 --- a/tfexec/cmd.go +++ b/tfexec/cmd.go @@ -171,7 +171,7 @@ func (tf *Terraform) buildEnv(mergeEnv map[string]string) []string { } func (tf *Terraform) buildTerraformCmd(ctx context.Context, mergeEnv map[string]string, args ...string) *exec.Cmd { - cmd := exec.Command(tf.execPath, args...) + cmd := exec.CommandContext(ctx, tf.execPath, args...) cmd.Env = tf.buildEnv(mergeEnv) cmd.Dir = tf.workingDir diff --git a/tfexec/cmd_default.go b/tfexec/cmd_default.go index c024a358..cc50e1e2 100644 --- a/tfexec/cmd_default.go +++ b/tfexec/cmd_default.go @@ -15,18 +15,6 @@ func (tf *Terraform) runTerraformCmd(ctx context.Context, cmd *exec.Cmd) error { cmd.Stdout = mergeWriters(cmd.Stdout, tf.stdout) cmd.Stderr = mergeWriters(cmd.Stderr, tf.stderr, &errBuf) - go func() { - <-ctx.Done() - if ctx.Err() == context.DeadlineExceeded || ctx.Err() == context.Canceled { - if cmd != nil && cmd.Process != nil { - err := cmd.Process.Kill() - if err != nil { - tf.logger.Printf("error from kill: %s", err) - } - } - } - }() - // check for early cancellation select { case <-ctx.Done(): diff --git a/tfexec/cmd_linux.go b/tfexec/cmd_linux.go index e3344db3..677c03bd 100644 --- a/tfexec/cmd_linux.go +++ b/tfexec/cmd_linux.go @@ -20,21 +20,6 @@ func (tf *Terraform) runTerraformCmd(ctx context.Context, cmd *exec.Cmd) error { Setpgid: true, } - go func() { - <-ctx.Done() - if ctx.Err() == context.DeadlineExceeded || ctx.Err() == context.Canceled { - if cmd != nil && cmd.Process != nil { - // send SIGINT to process group - err := syscall.Kill(-cmd.Process.Pid, syscall.SIGINT) - if err != nil { - tf.logger.Printf("error from SIGINT: %s", err) - } - } - - // TODO: send a kill if it doesn't respond for a bit? - } - }() - // check for early cancellation select { case <-ctx.Done():