diff --git a/source/Octopus.Tentacle.Core/Util/CommandLine/SilentProcessRunner.cs b/source/Octopus.Tentacle.Core/Util/CommandLine/SilentProcessRunner.cs index db362ef0b..ed0fce1dc 100644 --- a/source/Octopus.Tentacle.Core/Util/CommandLine/SilentProcessRunner.cs +++ b/source/Octopus.Tentacle.Core/Util/CommandLine/SilentProcessRunner.cs @@ -140,7 +140,35 @@ void WriteData(Action action, ManualResetEventSlim resetEvent, DataRecei process.BeginOutputReadLine(); process.BeginErrorReadLine(); - process.WaitForExit(); + var lastMemoryUsage = process.WorkingSet64; + var lastTotalProcessorTime = process.TotalProcessorTime; + var lastStuckProcessorTime = process.TotalProcessorTime; + try + { + while (!process.WaitForExit(1000)) + { + if (process.HasExited) break; + process.Refresh(); + if (lastTotalProcessorTime == process.TotalProcessorTime && lastMemoryUsage == process.WorkingSet64 && lastStuckProcessorTime != process.TotalProcessorTime) + { + //debug("Tentacle has detected a potential stuck process."); + lastStuckProcessorTime = process.TotalProcessorTime; + } + lastTotalProcessorTime = process.TotalProcessorTime; + lastMemoryUsage = process.WorkingSet64; + } + } + catch (SystemException) + { + try + { + //error($"Error occured while executing {executable}: {e.PrettyPrint()}"); + } + catch + { + // Ignore + } + } SafelyCancelRead(process.CancelErrorRead, debug); SafelyCancelRead(process.CancelOutputRead, debug);