diff --git a/client/driver/executor/exec_basic.go b/client/driver/executor/exec_basic.go index 51099e254..b0b687245 100644 --- a/client/driver/executor/exec_basic.go +++ b/client/driver/executor/exec_basic.go @@ -120,7 +120,10 @@ func (e *BasicExecutor) ForceStop() error { return fmt.Errorf("Failed to find user processes %v: %v", e.spawn.UserPid, err) } - return proc.Kill() + if err := proc.Kill(); err != nil && err.Error() != "os: process already finished" { + return err + } + return nil } func (e *BasicExecutor) Command() *exec.Cmd { diff --git a/client/driver/executor/exec_linux.go b/client/driver/executor/exec_linux.go index 47e037cef..221751644 100644 --- a/client/driver/executor/exec_linux.go +++ b/client/driver/executor/exec_linux.go @@ -397,7 +397,7 @@ func (e *LinuxExecutor) destroyCgroup() error { continue } - if err := process.Kill(); err != nil { + if err := process.Kill(); err != nil && err.Error() != "os: process already finished" { multierror.Append(errs, fmt.Errorf("Failed to kill Pid %v: %v", pid, err)) continue } diff --git a/client/task_runner_test.go b/client/task_runner_test.go index 9101d6a81..8208a0d57 100644 --- a/client/task_runner_test.go +++ b/client/task_runner_test.go @@ -1,6 +1,7 @@ package client import ( + "fmt" "log" "os" "path/filepath" @@ -175,8 +176,9 @@ func TestTaskRunner_SaveRestoreState(t *testing.T) { defer tr2.Destroy() // Destroy and wait - time.Sleep(time.Duration(testutil.TestMultiplier()*5) * time.Second) - if tr2.handle == nil { - t.Fatalf("RestoreState() didn't open handle") - } + testutil.WaitForResult(func() (bool, error) { + return tr2.handle != nil, fmt.Errorf("RestoreState() didn't open handle") + }, func(err error) { + t.Fatalf("err: %v", err) + }) }