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  }