Documentation
¶
Overview ¶
Package process provides the process runner implementation on the host.
Index ¶
- Constants
- Variables
- func CheckRunningByPid(ctx context.Context, processName string) bool
- func CountProcessesByStatus(ctx context.Context) (map[string][]*procs.Process, error)
- func CountRunningPids() (uint64, error)
- func Read(ctx context.Context, p Process, opts ...ReadOpOption) error
- type Op
- type OpOption
- func WithBashScriptContentsToRun(script string) OpOption
- func WithBashScriptFilePattern(pattern string) OpOption
- func WithBashScriptTmpDirectory(dir string) OpOption
- func WithCommand(args ...string) OpOption
- func WithCommands(commands [][]string) OpOption
- func WithEnvs(envs ...string) OpOption
- func WithLabel(key, value string) OpOption
- func WithOutputFile(file *os.File) OpOption
- func WithRestartConfig(config RestartConfig) OpOption
- func WithRunAsBashScript() OpOption
- type Process
- type ReadOp
- type ReadOpOption
- type RestartConfig
- type Runner
Constants ¶
const DefaultBashScriptFilePattern = "gpud-*.bash"
Variables ¶
var ( ErrProcessNotStarted = errors.New("process not started") ErrProcessAborted = errors.New("process aborted") )
var (
ErrProcessAlreadyRunning = errors.New("process already running")
)
var ErrProcessAlreadyStarted = errors.New("process already started")
Functions ¶
func CheckRunningByPid ¶ added in v0.3.7
func CountProcessesByStatus ¶ added in v0.1.5
CountProcessesByStatus counts all processes by its process status.
func CountRunningPids ¶ added in v0.3.1
CountRunningPids returns the number of running pids.
Types ¶
type OpOption ¶
type OpOption func(*Op)
func WithBashScriptContentsToRun ¶ added in v0.0.4
Sets the bash script contents to run. This is useful for running multiple/complicated commands.
func WithBashScriptFilePattern ¶ added in v0.4.4
Sets the pattern of the bash script file names. Default is to use "tmpbash*.bash".
func WithBashScriptTmpDirectory ¶ added in v0.4.4
Sets the temporary directory to store bash script files. Default is to use the system's temporary directory.
func WithCommand ¶ added in v0.0.4
Add a new command to run.
func WithCommands ¶ added in v0.0.4
Sets/overwrites the commands to run.
func WithOutputFile ¶
Sets the file to which stderr and stdout will be written. For instance, you can set it to os.Stderr to pipe all the sub-process stderr and stdout to the parent process's stderr. Default is to set the os.Pipe to forward its output via io.ReadCloser.
If the process exits with a non-zero exit code, stdout/stderr pipes may not work. If retry configuration is specified, specify the output file to read all the output.
func WithRestartConfig ¶
func WithRestartConfig(config RestartConfig) OpOption
Configures the process restart behavior. If the process exits with a non-zero exit code, stdout/stderr pipes may not work.
func WithRunAsBashScript ¶
func WithRunAsBashScript() OpOption
Set true to run commands as a bash script. This is useful for running multiple/complicated commands.
type Process ¶
type Process interface {
// Starts the process but does not wait for it to exit.
Start(ctx context.Context) error
// Returns true if the process is started.
Started() bool
// StartAndWaitForCombinedOutput starts the process and returns the combined output of the command.
// Returns ErrProcessAlreadyStarted if the process is already started.
StartAndWaitForCombinedOutput(ctx context.Context) ([]byte, error)
// Closes the process (aborts if still running) and waits for it to exit.
// Cleans up the process resources.
Close(ctx context.Context) error
// Returns true if the process is closed.
Closed() bool
// Waits for the process to exit and returns the error, if any.
// If the command completes successfully, the error will be nil.
Wait() <-chan error
// Returns the current pid of the process.
PID() int32
// Returns the exit code of the process.
// Returns 0 if the process is not started yet.
// Returns non-zero if the process exited with a non-zero exit code.
ExitCode() int32
// Returns the stdout reader.
// stderr/stdout piping sometimes doesn't work well on latest mac with io.ReadAll
// Use bufio.NewScanner(p.StdoutReader()) instead.
//
// If the process exits with a non-zero exit code, stdout/stderr pipes may not work.
// If retry configuration is specified, specify the output file to read all the output.
//
// The returned reader is set to nil upon the abort call on the process,
// to prevent redundant closing of the reader.
StdoutReader() io.Reader
// Returns the stderr reader.
// stderr/stdout piping sometimes doesn't work well on latest mac with io.ReadAll
// Use bufio.NewScanner(p.StderrReader()) instead.
//
// If the process exits with a non-zero exit code, stdout/stderr pipes may not work.
// If retry configuration is specified, specify the output file to read all the output.
//
// The returned reader is set to nil upon the abort call on the process,
// to prevent redundant closing of the reader.
StderrReader() io.Reader
}
type ReadOpOption ¶ added in v0.3.6
type ReadOpOption func(*ReadOp)
func WithInitialBufferSize ¶ added in v0.4.3
func WithInitialBufferSize(size int) ReadOpOption
Sets the initial buffer size for the scanner. Defaults to 4096 bytes.
func WithProcessLine ¶ added in v0.3.6
func WithProcessLine(fn func(line string)) ReadOpOption
Sets a function to process each line of the command output. Helps with debugging if command times out in the middle of reading.
func WithReadStderr ¶ added in v0.3.6
func WithReadStderr() ReadOpOption
func WithReadStdout ¶ added in v0.3.6
func WithReadStdout() ReadOpOption
func WithWaitForCmd ¶ added in v0.3.6
func WithWaitForCmd() ReadOpOption
type RestartConfig ¶
type RestartConfig struct {
// Set true to restart the process on error exit.
OnError bool
// Set the maximum number of restarts.
Limit int
// Set the interval between restarts.
Interval time.Duration
}
RestartConfig is the configuration for the process restart. If the process exits with a non-zero exit code, stdout/stderr pipes may not work. If retry configuration is specified, specify the output file to read all the output.
type Runner ¶ added in v0.5.0
type Runner interface {
// RunUntilCompletion starts a bash script, blocks until it finishes,
// and returns the output and the exit code.
// Whether to return an error when there is already a process running is up to the implementation.
RunUntilCompletion(ctx context.Context, script string) ([]byte, int32, error)
}
Runner defines the interface for a process runner. It facillitates scheduling and running arbitrary bash scripts.
func NewExclusiveRunner ¶ added in v0.5.0
func NewExclusiveRunner() Runner
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
examples
|
|
|
bash-script-output-to-file
command
|
|
|
restart-commands
command
|
|
|
simple-command
command
|
|
|
simple-commands
command
|
|
|
stream-blocking-commands
command
|
|
|
stream-commands
command
|