public Integer run()

in src/main/java/com/epam/dep/esp/common/OSRunner.java [56:126]


    public Integer run(long processTimeout) {
        boolean error = false;
        try {
            if (LOGGER.isDebugEnabled()) {
                LOGGER.debug("Wait for {}", process);
            }
            if (process.waitFor(processTimeout, TimeUnit.SECONDS)) {
                return Integer.valueOf(process.exitValue());
            } else {
                return null;
            }
        } catch (InterruptedException ignore) {
            LOGGER.error(INTERRUPTED, ignore);
            error = true;
        } finally {
            if (!error) {
                try {
                    if (LOGGER.isDebugEnabled()) {
                        LOGGER.debug("Wait for error stream processing.");
                    }
                    errorPumper.join(timeout);
                } catch (InterruptedException e) {
                    LOGGER.error(INTERRUPTED, e);
                }
                try {
                    if (LOGGER.isDebugEnabled()) {
                        LOGGER.debug("Wait for std stream processing.");
                    }
                    stdPumper.join(timeout);
                } catch (InterruptedException e) {
                    LOGGER.error(INTERRUPTED, e);
                }
            }

            if (errorPumper.isAlive()) {
                errorPumper.interrupt();
                if (LOGGER.isDebugEnabled()) {
                    LOGGER.debug("Kill Error Pumper {} {}}", process, errorPumper);
                }
            }

            if (stdPumper.isAlive()) {
                stdPumper.interrupt();
                if (LOGGER.isDebugEnabled()) {
                    LOGGER.debug("Kill Out Pumper {} {}", process, stdPumper);
                }
            }

            if (error) {
                try {
                    if (LOGGER.isDebugEnabled()) {
                        LOGGER.debug("Wait for error die.");
                    }
                    errorPumper.join(timeout);
                } catch (InterruptedException e) {
                    LOGGER.error(INTERRUPTED, e);
                }
                try {
                    if (LOGGER.isDebugEnabled()) {
                        LOGGER.debug("Wait for std die.");
                    }
                    stdPumper.join(timeout);
                } catch (InterruptedException e) {
                    LOGGER.error(INTERRUPTED, e);
                }
            }
            result.addAll(errorPumper.getOut());
            result.addAll(stdPumper.getOut());
        }
        return null;
    }