agent-orchestrator/backend/internal/cli/process.go

31 lines
693 B
Go

package cli
import (
"os"
"os/exec"
)
type processStartConfig struct {
Path string
Args []string
Env []string
Stdout *os.File
Stderr *os.File
}
func startProcess(cfg processStartConfig) error {
cmd := exec.Command(cfg.Path, cfg.Args...)
cmd.Env = cfg.Env
cmd.Stdout = cfg.Stdout
cmd.Stderr = cfg.Stderr
// Detach the daemon into its own session/process group so a Ctrl-C in the
// terminal where `ao start` is waiting for readiness doesn't also SIGINT the
// freshly spawned daemon (it would otherwise share the launcher's group).
cmd.SysProcAttr = detachSysProcAttr()
if err := cmd.Start(); err != nil {
return err
}
go func() { _ = cmd.Wait() }()
return nil
}