RIC:1060: Change in PTL
[ric-plt/vespamgr.git] / cmd / vespamgr / subprocess.go
1 /*
2  *  Copyright (c) 2019 AT&T Intellectual Property.
3  *  Copyright (c) 2018-2019 Nokia.
4  *
5  *  Licensed under the Apache License, Version 2.0 (the "License");
6  *  you may not use this file except in compliance with the License.
7  *  You may obtain a copy of the License at
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  *
17  *  This source code is part of the near-RT RIC (RAN Intelligent Controller)
18  *  platform project (RICP).
19  *
20  */
21 package main
22
23 import (
24         "os"
25         "os/exec"
26 )
27
28 type CommandRunner struct {
29         exe  string
30         args []string
31         cmd  *exec.Cmd
32 }
33
34 func (r *CommandRunner) Run(result chan error) {
35         r.cmd = exec.Command(r.exe, r.args...)
36         r.cmd.Stdout = os.Stdout
37         r.cmd.Stderr = os.Stderr
38         err := r.cmd.Start()
39         go func() {
40                 if err != nil {
41                         result <- err
42                 } else {
43                         result <- r.cmd.Wait()
44                 }
45         }()
46 }
47
48 func (r *CommandRunner) Kill() error {
49         if r.cmd != nil {
50                 return r.cmd.Process.Kill()
51         }
52         return nil
53 }
54
55 func NewCommandRunner(exe string, arg ...string) *CommandRunner {
56         r := &CommandRunner{exe: exe, args: arg}
57         return r
58 }