diff --git a/src/Tools/dotnet-counters/CounterMonitor.cs b/src/Tools/dotnet-counters/CounterMonitor.cs index 3649444b2d..d7cf5ebbac 100644 --- a/src/Tools/dotnet-counters/CounterMonitor.cs +++ b/src/Tools/dotnet-counters/CounterMonitor.cs @@ -76,6 +76,18 @@ private void StopMonitor() // If the app we're monitoring exits abruptly, this may throw in which case we just swallow the exception and exit gracefully. Debug.WriteLine($"[ERROR] {ex.ToString()}"); } + // We may time out if the process ended before we sent StopTracing command. We can just exit in that case. + catch (TimeoutException) + { + } + // On Unix platforms, we may actually get a PNSE since the pipe is gone with the process, and Runtime Client Library + // does not know how to distinguish a situation where there is no pipe to begin with, or where the process has exited + // before dotnet-counters and got rid of a pipe that once existed. + // Since we are catching this in StopMonitor() we know that the pipe once existed (otherwise the exception would've + // been thrown in StartMonitor directly) + catch (PlatformNotSupportedException) + { + } } public async Task Monitor(CancellationToken ct, List counter_list, IConsole console, int processId, int refreshInterval)