void IConsoleProcessMonitor.Output(IConsoleProcess process, string line) { if (_ResetOnOutput) { lock (_Lock) _Timer?.Change(_Timeout, _InfiniteTimeSpan); } }
void IConsoleProcessMonitor.Started(IConsoleProcess process) { lock (_Lock) { _Timer = new Timer(TimerCallback, null, _Timeout, _InfiniteTimeSpan); _Process = process; } }
void IConsoleProcessMonitor.Exited(IConsoleProcess process, int exitCode) { lock (_Lock) { _Timer?.Dispose(); _Timer = null; _Process = null; } }
void IDisposable.Dispose() { lock (_Lock) { _Timer?.Dispose(); _Timer = null; _Process = null; } }
void IConsoleProcessMonitor.Output(IConsoleProcess process, string line) { if (line == null) { throw new ArgumentNullException(nameof(line)); } Events.Add(new ConsoleProcessStandardOutputEvent(process.ExecutionDuration, DateTime.Now, line)); }
private async Task EnterInputAndWaitForExitAsync(IConsoleProcess process, ProcessRunArguments args) { await Task.Yield(); process.WriteStandardInput(args.StandardInput.StringValue); process.WriteStandardInput("\n"); process.CloseStandardInput(); process.WaitForExit((int)args.MaxRuntime.TotalMilliseconds + 300); }
private void TimerCallback(object state) { bool shouldTerminate; lock (_Lock) { shouldTerminate = _Timer != null; _Timer?.Dispose(); _Timer = null; } if (shouldTerminate) { _Process?.Terminate(); } _Process = null; }
private ProcessRunResult Run(ProcessRunArguments args) { IConsoleProcess process = args.Application.StartProcess(args.ProcessArguments); bool timelyExit = TryWaitForTimelyExitAsync(process, args).GetAwaiter().GetResult(); bool crashed = process.TryFindCrashReport(out ICrashReport report); string stdOut = process.GetStandardOutput(); string stdErr = process.GetStandardError(); return(new ProcessRunResult( DeduceExitType(crashed, timelyExit), report, StringOrFile.FromText(stdOut), StringOrFile.FromText(stdErr), 100, process.ExitCode, process.ExecutionTime )); }
private async Task <bool> TryWaitForTimelyExitAsync(IConsoleProcess process, ProcessRunArguments args) { bool timelyExit = true; await Task.WhenAny( Task.Delay(args.MaxRuntime), EnterInputAndWaitForExitAsync(process, args) ); if (!process.HasExited) { await Task.Delay(100); process.EnsureKilled(); timelyExit = false; } else { timelyExit = true; } return(timelyExit); }
public void Exited(IConsoleProcess process, int exitCode) { _Logger.LogDebug($"process #{process.Id} terminated with exit code {exitCode}"); }
void IConsoleProcessMonitor.Output(IConsoleProcess process, string line) { StandardOutput?.Invoke(this, new ConsoleProcessOutputEventArgs(DateTime.Now, process.ExecutionDuration, process, line)); }
void IConsoleProcessMonitor.Started(IConsoleProcess process) { Started?.Invoke(this, new ConsoleProcessStartedEventArgs(DateTime.Now, process.ExecutionDuration, process)); }
void IConsoleProcessMonitor.Exited(IConsoleProcess process, int exitCode) { Events.Add(new ConsoleProcessExitedEvent(process.ExecutionDuration, DateTime.Now, exitCode)); }
void IConsoleProcessMonitor.Started(IConsoleProcess process) { Events.Add(new ConsoleProcessStartedEvent(process.ExecutionDuration, DateTime.Now)); }
public void Output(IConsoleProcess process, string line) { _Logger.LogDebug($"process #{process.Id}: {line}"); }
public void Error(IConsoleProcess process, string line) { _Logger.LogDebug($"process #{process.Id} error: {line}"); }
protected ConsoleProcessEventArgs(DateTime timestamp, TimeSpan relativeTimestamp, [NotNull] IConsoleProcess process) { Timestamp = timestamp; RelativeTimestamp = relativeTimestamp; Process = process ?? throw new ArgumentNullException(nameof(process)); }
public ConsoleProcessStartedEventArgs(DateTime timestamp, TimeSpan relativeTimestamp, [NotNull] IConsoleProcess process) : base(timestamp, relativeTimestamp, process) { }
void IConsoleProcessMonitor.Exited(IConsoleProcess process, int exitCode) { Exited?.Invoke(this, new ConsoleProcessExitedEventArgs(DateTime.Now, process.ExecutionDuration, process, exitCode)); }
public ConsoleProcessOutputEventArgs(DateTime timestamp, TimeSpan relativeTimestamp, [NotNull] IConsoleProcess process, [NotNull] string line) : base(timestamp, relativeTimestamp, process) { Line = line; if (line == null) { throw new ArgumentNullException(nameof(line)); } }
public ConsoleProcessExitedEventArgs(DateTime timestamp, TimeSpan relativeTimestamp, [NotNull] IConsoleProcess process, int exitCode) : base(timestamp, relativeTimestamp, process) { ExitCode = exitCode; }
public void Started(IConsoleProcess process) { _Logger.LogDebug($"process #{process.Id} started"); }