Fixed --wait

This commit is contained in:
Jae Kwon 2015-04-16 10:54:07 -07:00
parent 5b9dbddc7b
commit 372cfb509d
3 changed files with 21 additions and 14 deletions

View File

@ -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
}

View File

@ -10,6 +10,7 @@ type ResponseStatus struct {
}
type ResponseRunProcess struct {
Success bool
}
type ResponseStopProcess struct {

View File

@ -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()