logmower-shipper/vendor/github.com/jtagcat/util/std/exec.go

33 lines
438 B
Go

package std
import (
"context"
"fmt"
"os/exec"
)
func RunCmdWithCtx(ctx context.Context, cmd *exec.Cmd) error {
select {
case <-ctx.Done():
return ctx.Err()
default:
}
if err := cmd.Start(); err != nil {
return fmt.Errorf("starting command: %w", err)
}
wait := make(chan error)
go func() {
wait <- cmd.Wait()
close(wait)
}()
select {
case <-ctx.Done():
return ctx.Err()
case err := <-wait:
return err
}
}