Refactor the code
[ric-plt/vespamgr.git] / cmd / vesmgr / subprocess.go
diff --git a/cmd/vesmgr/subprocess.go b/cmd/vesmgr/subprocess.go
new file mode 100644 (file)
index 0000000..0071c20
--- /dev/null
@@ -0,0 +1,35 @@
+package main
+
+import (
+       "os"
+       "os/exec"
+)
+
+type cmdRunner struct {
+       exe  string
+       args []string
+       cmd  *exec.Cmd
+}
+
+func (r *cmdRunner) run(result chan error) {
+       r.cmd = exec.Command(r.exe, r.args...)
+       r.cmd.Stdout = os.Stdout
+       r.cmd.Stderr = os.Stderr
+       err := r.cmd.Start()
+       go func() {
+               if err != nil {
+                       result <- err
+               } else {
+                       result <- r.cmd.Wait()
+               }
+       }()
+}
+
+func (r *cmdRunner) kill() error {
+       return r.cmd.Process.Kill()
+}
+
+func makeRunner(exe string, arg ...string) cmdRunner {
+       r := cmdRunner{exe: exe, args: arg}
+       return r
+}