public void terminateClean() throws Exception { sig_interrupt.setValue(true); if (_outputList.size() > 1) { CharPump p1 = _outputList.get(0); if (p1 != null) { synchronized (p1) { p1.wait(1000); } } CharPump p2 = _outputList.get(1); if (p2 != null) { synchronized (p2) { p2.wait(1000); } } } cleanUpProcess(); }
private static int handleProcessStatic( Process pProcess, String pOrigCmd, Writer pOut, Writer pErr, List<CharPump> stdOutErrList, MutableBoolean interrupt) throws InterruptedException { CharPump outpump = new CharPump( new BufferedReader(new InputStreamReader(pProcess.getInputStream())), pOut, pOrigCmd, interrupt); stdOutErrList.add(outpump); CharPump errpump = new CharPump( new BufferedReader(new InputStreamReader(pProcess.getErrorStream())), pErr, pOrigCmd, interrupt); stdOutErrList.add(errpump); outpump.start(); errpump.start(); outpump.join(); errpump.join(); if (_log.isInfoEnabled()) _log.info("Waiting for '" + pOrigCmd + "' to complete."); int status = pProcess.waitFor(); return status; }