List<String> commands=new ArrayList(); cmds.add("sh"); cmds.add("-c"); cmds.add("ps -ef | grep -v grep"); ProcessBuilder=new ProcessBuilder(commands); //...其它参数添加 processBuilder.command(commands); processBuilder.directory(path);//切换工作目录 processBuilder.redirectErrorStream(true); Process process = processBuilder.start(); StringBuilder result = new StringBuilder(); final BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); try { String line; while ((line = reader.readLine()) != null) { result.append(line); LOGGER.info(processBuilder.command().toString() + " --->: " + line); } } catch (IOException e) { LOGGER.warn("failed to read output from process", e); } finally { IOUtils.closeQuietly(reader); } process.waitFor(); int exit = process.exitValue(); if (exit != 0) { throw new IOException("failed to execute:" + processBuilder.command() + " with result:" + result); } else { return exit; }
在JavaSE5之前使用Runtime的exec方法执行本地命令.在JavaSE5之后,可以使用ProcessBuilder执行本地命令.
一篇不错的介绍ProcessBuilder的文章:
http://www.cnblogs.com/taven/archive/2011/12/17/2291460.html