 
     if is_pid(runner_pid) and Process.alive?(runner_pid) do
       Process.exit(runner_pid, :shutdown)
+
       receive do
         {:DOWN, ^runner_monitor, :process, ^runner_pid, _error} -> :ok
       end

    receive do
      {^runner_pid, reason} ->
        {runner_pid, runner_monitor, error || reason}
      {:DOWN, ^runner_monitor, :process, ^runner_pid, reason} ->
        {nil, nil, error || {{:EXIT, runner_pid}, reason, []}}
    after

        case Process.info(runner_pid, :current_stacktrace) do
          {:current_stacktrace, stacktrace} ->
            Process.exit(runner_pid, :kill)

            receive do
              {:DOWN, ^runner_monitor, :process, ^runner_pid, _} -> :ok
            end

            exception = ExUnit.TimeoutError.exception(timeout: timeout, type: "on_exit callback")
            {nil, nil, error || {:error, exception, stacktrace}}

          nil ->
            receive_runner_reply(runner_pid, runner_monitor, error, timeout)
        end
