Changed how running a process and waiting for exit is handled

This commit is contained in:
Mark McDowall 2014-02-13 18:18:11 -08:00
parent c5a3b714e6
commit 7d4a514a68
2 changed files with 18 additions and 11 deletions

View File

@ -179,9 +179,7 @@ namespace NzbDrone.Common.Processes
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 @@ namespace NzbDrone.Common.Processes
{
Logger.Trace("Waiting for process {0} to exit.", process.ProcessName);
if (!process.HasExited)
{
process.WaitForExit();
}
process.WaitForExit();
}
public void SetPriority(int processId, ProcessPriorityClass priority)

View File

@ -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<ProcessInfo> FindNzbDroneProcesses()
@ -21,10 +24,19 @@ namespace NzbDrone.Mono
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();
}
}