boolean (int pid, Process process, boolean tree) { LOG.assertTrue(pid > 0 || process != null); try { if (process != null) { pid = getProcessId(process); } @NonNls String[] cmdArray = {"taskkill", "/f", "/pid", String.valueOf(pid), tree ? "/t" : ""}; if (LOG.isDebugEnabled()) { LOG.debug(StringUtil.join(cmdArray, " ")); } Process p = new ProcessBuilder(cmdArray).redirectErrorStream(true).start(); String output = FileUtil.loadTextAndClose(p.getInputStream()); int res = p.waitFor(); if (res != 0 && (process == null || isAlive(process))) { LOG.warn(StringUtil.join(cmdArray, " ") + " failed: " + output); return false; } else if (LOG.isDebugEnabled()) { LOG.debug(output); } return true; } catch (Exception e) { LOG.warn(e); } return false; }