31 lines
761 B
Go
31 lines
761 B
Go
package internal
|
|
|
|
import (
|
|
"bytes"
|
|
"os/exec"
|
|
"time"
|
|
)
|
|
|
|
// CombinedOutputTimeout runs the given command with the given timeout and
|
|
// returns the combined output of stdout and stderr.
|
|
// If the command times out, it attempts to kill the process.
|
|
func CombinedOutputTimeout(c *exec.Cmd, timeout time.Duration) ([]byte, error) {
|
|
var b bytes.Buffer
|
|
c.Stdout = &b
|
|
c.Stderr = &b
|
|
if err := c.Start(); err != nil {
|
|
return nil, err
|
|
}
|
|
err := WaitTimeout(c, timeout)
|
|
return b.Bytes(), err
|
|
}
|
|
|
|
// RunTimeout runs the given command with the given timeout.
|
|
// If the command times out, it attempts to kill the process.
|
|
func RunTimeout(c *exec.Cmd, timeout time.Duration) error {
|
|
if err := c.Start(); err != nil {
|
|
return err
|
|
}
|
|
return WaitTimeout(c, timeout)
|
|
}
|