示例#1
0
func (testRunner *TestRunner) Kill(writer execLogger.ExecutionLogger) error {
	if testRunner.isStillRunning() {
		defer testRunner.Connection.Close()
		testRunner.sendProcessKillMessage()

		exited := make(chan bool, 1)
		go func() {
			for {
				if testRunner.isStillRunning() {
					time.Sleep(100 * time.Millisecond)
				} else {
					exited <- true
					return
				}
			}
		}()

		select {
		case done := <-exited:
			if done {
				return nil
			}
		case <-time.After(config.PluginKillTimeout()):
			writer.Warning("Killing runner with PID:%d forcefully\n", testRunner.Cmd.Process.Pid)
			return testRunner.killRunner()
		}
	}
	return nil
}