diff --git a/task_opts.go b/task_opts.go index e8d99eb51..2af443c3a 100644 --- a/task_opts.go +++ b/task_opts.go @@ -158,7 +158,17 @@ func WithProcessKill(ctx context.Context, p Process) error { return err } if err := p.Kill(ctx, syscall.SIGKILL, WithKillAll); err != nil { - if errdefs.IsFailedPrecondition(err) || errdefs.IsNotFound(err) { + // Kill might still return an IsNotFound error, even if it actually + // killed the process. + if errdefs.IsNotFound(err) { + select { + case <-ctx.Done(): + return ctx.Err() + case <-s: + return nil + } + } + if errdefs.IsFailedPrecondition(err) { return nil } return err