(ctx, killCtx context.Context, logger slog.Logger, cmd *exec.Cmd)
| 574 | } |
| 575 | |
| 576 | func interruptCommandOnCancel(ctx, killCtx context.Context, logger slog.Logger, cmd *exec.Cmd) { |
| 577 | go func() { |
| 578 | select { |
| 579 | case <-ctx.Done(): |
| 580 | var err error |
| 581 | switch runtime.GOOS { |
| 582 | case "windows": |
| 583 | // Interrupts aren't supported by Windows. |
| 584 | err = cmd.Process.Kill() |
| 585 | default: |
| 586 | err = cmd.Process.Signal(os.Interrupt) |
| 587 | } |
| 588 | logger.Debug(ctx, "interrupted command", slog.F("args", cmd.Args), slog.Error(err)) |
| 589 | |
| 590 | case <-killCtx.Done(): |
| 591 | logger.Debug(ctx, "kill context ended", slog.F("args", cmd.Args)) |
| 592 | } |
| 593 | }() |
| 594 | } |
| 595 | |
| 596 | type logSink interface { |
| 597 | ProvisionLog(l proto.LogLevel, o string) |
no test coverage detected