package core import ( "os/exec" "time" ) func Timeout(cmd *exec.Cmd, t time.Duration) (output []byte, err error) { done := make(chan error) out := make(chan []byte) go func() { o, e := cmd.Output() done <- e out <- o }() select { case <-time.After(t): e := cmd.Process.Kill() <-out if e != nil { <-done err = e return } err = <-done case e := <-done: err = e output = <-out } return }