diff --git a/src/NzbDrone.Common/Processes/ProcessProvider.cs b/src/NzbDrone.Common/Processes/ProcessProvider.cs index e36c866915..d1c4774e5d 100644 --- a/src/NzbDrone.Common/Processes/ProcessProvider.cs +++ b/src/NzbDrone.Common/Processes/ProcessProvider.cs @@ -179,9 +179,7 @@ public Process SpawnNewProcess(string path, string args = null) public ProcessOutput StartAndCapture(string path, string args = null) { var output = new ProcessOutput(); - var process = Start(path, args, s => output.Standard.Add(s), error => output.Error.Add(error)); - - WaitForExit(process); + Start(path, args, s => output.Standard.Add(s), error => output.Error.Add(error)).WaitForExit(); return output; } @@ -190,10 +188,7 @@ public void WaitForExit(Process process) { Logger.Trace("Waiting for process {0} to exit.", process.ProcessName); - if (!process.HasExited) - { - process.WaitForExit(); - } + process.WaitForExit(); } public void SetPriority(int processId, ProcessPriorityClass priority) diff --git a/src/NzbDrone.Mono/NzbDroneProcessProvider.cs b/src/NzbDrone.Mono/NzbDroneProcessProvider.cs index 79a2b35799..1804c077de 100644 --- a/src/NzbDrone.Mono/NzbDroneProcessProvider.cs +++ b/src/NzbDrone.Mono/NzbDroneProcessProvider.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using NLog; using NzbDrone.Common.Model; using NzbDrone.Common.Processes; @@ -9,10 +10,12 @@ namespace NzbDrone.Mono public class NzbDroneProcessProvider : INzbDroneProcessProvider { private readonly IProcessProvider _processProvider; + private readonly Logger _logger; - public NzbDroneProcessProvider(IProcessProvider processProvider) + public NzbDroneProcessProvider(IProcessProvider processProvider, Logger logger) { _processProvider = processProvider; + _logger = logger; } public List FindNzbDroneProcesses() @@ -21,10 +24,19 @@ public List FindNzbDroneProcesses() return monoProcesses.Where(c => { - var processArgs = _processProvider.StartAndCapture("ps", String.Format("-p {0} -o args=", c.Id)); + try + { + var processArgs = _processProvider.StartAndCapture("ps", String.Format("-p {0} -o args=", c.Id)); - return processArgs.Standard.Any(p => p.Contains(ProcessProvider.NZB_DRONE_PROCESS_NAME + ".exe") || - p.Contains(ProcessProvider.NZB_DRONE_CONSOLE_PROCESS_NAME + ".exe")); + return processArgs.Standard.Any(p => p.Contains(ProcessProvider.NZB_DRONE_PROCESS_NAME + ".exe") || + p.Contains(ProcessProvider.NZB_DRONE_CONSOLE_PROCESS_NAME + ".exe")); + } + catch (InvalidOperationException ex) + { + _logger.WarnException("Error getting process arguments", ex); + return false; + } + }).ToList(); } }