Fixed --wait
This commit is contained in:
parent
5b9dbddc7b
commit
372cfb509d
|
@ -165,8 +165,16 @@ func RunProcess(wait bool, label string, execPath string, args []string, input s
|
|||
}
|
||||
|
||||
if wait {
|
||||
exitErr := pcm.Wait(proc)
|
||||
return nil, exitErr
|
||||
<-proc.WaitCh
|
||||
if proc.ExitState == nil {
|
||||
return &ResponseRunProcess{
|
||||
Success: true,
|
||||
}, nil
|
||||
} else {
|
||||
return &ResponseRunProcess{
|
||||
Success: proc.ExitState.Success(), // Would be always false?
|
||||
}, nil
|
||||
}
|
||||
} else {
|
||||
return &ResponseRunProcess{}, nil
|
||||
}
|
||||
|
|
|
@ -10,6 +10,7 @@ type ResponseStatus struct {
|
|||
}
|
||||
|
||||
type ResponseRunProcess struct {
|
||||
Success bool
|
||||
}
|
||||
|
||||
type ResponseStopProcess struct {
|
||||
|
|
|
@ -29,6 +29,7 @@ type Process struct {
|
|||
Cmd *exec.Cmd `json:"-"`
|
||||
ExitState *os.ProcessState `json:"-"`
|
||||
OutputFile *os.File `json:"-"`
|
||||
WaitCh chan struct{} `json:"-"`
|
||||
}
|
||||
|
||||
const (
|
||||
|
@ -56,8 +57,6 @@ func Create(mode int, label string, execPath string, args []string, input string
|
|||
}
|
||||
if err := cmd.Start(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
fmt.Printf("Success!")
|
||||
}
|
||||
proc := &Process{
|
||||
Label: label,
|
||||
|
@ -68,23 +67,22 @@ func Create(mode int, label string, execPath string, args []string, input string
|
|||
Cmd: cmd,
|
||||
ExitState: nil,
|
||||
OutputFile: outFile,
|
||||
WaitCh: make(chan struct{}),
|
||||
}
|
||||
go func() {
|
||||
Wait(proc)
|
||||
err := proc.Cmd.Wait()
|
||||
if err != nil {
|
||||
fmt.Printf("Process exit: %v\n", err)
|
||||
if exitError, ok := err.(*exec.ExitError); ok {
|
||||
proc.ExitState = exitError.ProcessState
|
||||
}
|
||||
}
|
||||
proc.EndTime = time.Now() // TODO make this goroutine-safe
|
||||
close(proc.WaitCh)
|
||||
}()
|
||||
return proc, nil
|
||||
}
|
||||
|
||||
func Wait(proc *Process) error {
|
||||
exitErr := proc.Cmd.Wait()
|
||||
if exitErr != nil {
|
||||
fmt.Printf("Process exit: %v\n", exitErr)
|
||||
proc.ExitState = exitErr.(*exec.ExitError).ProcessState
|
||||
}
|
||||
return exitErr
|
||||
}
|
||||
|
||||
func Stop(proc *Process, kill bool) error {
|
||||
if kill {
|
||||
return proc.Cmd.Process.Kill()
|
||||
|
|
Loading…
Reference in New Issue