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 }