/// <inheritdoc /> public virtual Task KillAsync() { Contract.Requires(Started); ProcessDumper.TryDumpProcessAndChildren(ProcessId, ProcessInfo.TimeoutDumpDirectory, out m_dumpCreationException); return(m_processExecutor.KillAsync()); }
/// <summary> /// Kills process executor. /// </summary> protected Task KillProcessExecutorAsync(AsyncProcessExecutor executor) { Contract.Requires(executor != null); ProcessDumper.TryDumpProcessAndChildren(ProcessId, WorkingDirectory, out DumpCreationException); return(executor.KillAsync()); }
/// <inheritdoc /> public override Task KillAsync() { Contract.Requires(m_processExecutor != null); ProcessDumper.TryDumpProcessAndChildren(ProcessId, GetOutputDirectory(), out m_dumpCreationException); return(m_processExecutor.KillAsync()); }
/// <inheritdoc /> public virtual Task KillAsync() { Contract.Requires(Started); ProcessDumper.TryDumpProcessAndChildren(ProcessId, ProcessInfo.TimeoutDumpDirectory, out m_dumpCreationException); try { if (!Process.HasExited) { Process.Kill(); } } catch (Exception e) when(e is Win32Exception || e is InvalidOperationException) { // thrown if the process doesn't exist (e.g., because it has already completed on its own) } m_stdoutFlushedTcs.TrySetResult(Unit.Void); m_stderrFlushedTcs.TrySetResult(Unit.Void); m_killed = true; return(WhenExited); }