github.com/chenbh/concourse/v6@v6.4.2/worker/workercmd/cmd_runner.go (about) 1 package workercmd 2 3 import ( 4 "os" 5 "os/exec" 6 ) 7 8 type CmdRunner struct { 9 Cmd *exec.Cmd 10 } 11 12 func (runner CmdRunner) Run(signals <-chan os.Signal, ready chan<- struct{}) error { 13 err := runner.Cmd.Start() 14 if err != nil { 15 return err 16 } 17 18 close(ready) 19 20 waitErr := make(chan error, 1) 21 22 go func() { 23 waitErr <- runner.Cmd.Wait() 24 }() 25 26 for { 27 select { 28 case sig := <-signals: 29 runner.Cmd.Process.Signal(sig) 30 case err := <-waitErr: 31 return err 32 } 33 } 34 }