From a4b1857b8432ca1a7105cdfd945e597cb6b61dff Mon Sep 17 00:00:00 2001 From: Robert von Burg Date: Fri, 4 Dec 2015 17:10:14 +0100 Subject: [PATCH] [Minor] Added a timeout in ProcessHelper --- .../eitchnet/utils/helper/ProcessHelper.java | 30 +++++++++---------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/src/main/java/ch/eitchnet/utils/helper/ProcessHelper.java b/src/main/java/ch/eitchnet/utils/helper/ProcessHelper.java index 020422deb..40dfba36e 100644 --- a/src/main/java/ch/eitchnet/utils/helper/ProcessHelper.java +++ b/src/main/java/ch/eitchnet/utils/helper/ProcessHelper.java @@ -20,6 +20,7 @@ import java.io.File; import java.io.IOException; import java.io.InputStreamReader; import java.text.MessageFormat; +import java.util.concurrent.TimeUnit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -78,6 +79,11 @@ public class ProcessHelper { } public static ProcessResult runCommand(File workingDirectory, String... commandAndArgs) { + return runCommand(1, TimeUnit.MINUTES, workingDirectory, commandAndArgs); + } + + public static ProcessResult runCommand(long timeout, TimeUnit unit, File workingDirectory, + String... commandAndArgs) { if (!workingDirectory.isDirectory()) { String msg = "Working directory does not exist or is not a directory at {0}"; //$NON-NLS-1$ @@ -98,27 +104,19 @@ public class ProcessHelper { final Process process = processBuilder.start(); int[] returnValue = new int[1]; - try (final BufferedReader errorStream = new BufferedReader(new InputStreamReader(process.getErrorStream())); - final BufferedReader inputStream = new BufferedReader( - new InputStreamReader(process.getInputStream()));) { + try (BufferedReader errorStream = new BufferedReader(new InputStreamReader(process.getErrorStream())); + BufferedReader inputStream = new BufferedReader(new InputStreamReader(process.getInputStream()));) { - Thread errorIn = new Thread("errorIn") { //$NON-NLS-1$ - @Override - public void run() { - readStream(sb, "[ERROR] ", errorStream); //$NON-NLS-1$ - } - }; + Thread errorIn = new Thread(() -> readStream(sb, "[ERROR] ", errorStream), "errorIn"); errorIn.start(); - Thread infoIn = new Thread("infoIn") { //$NON-NLS-1$ - @Override - public void run() { - readStream(sb, "[INFO] ", inputStream); //$NON-NLS-1$ - } - }; + Thread infoIn = new Thread(() -> readStream(sb, "[INFO] ", inputStream), "infoIn"); infoIn.start(); - returnValue[0] = process.waitFor(); + boolean ok = process.waitFor(timeout, unit); + if (!ok) + sb.append("[ERROR] Command failed to end before timeout or failed to execute."); + returnValue[0] = process.exitValue(); errorIn.join(100l); infoIn.join(100l);