ProcessBuilder pb=new ProcessBuilder(cmd);
 pb.start();
2.使用Runtime
Runtime.getRuntime().exec(cmd)
代码如下:
package cn.iigrowing.cmd;
import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.LineNumberReader;
public class TestCmd {
 public static void main(String[] args) throws IOException,
 InterruptedException {
 String cmd = "";
 if (args == null || args.length == 0) {
 System.out.println("请输入命令行参数");
 } else {
 for (int i = 0; i < args.length; i++) {
 cmd += args[i] + " ";
 }
 }
 try {
 Process process = Runtime.getRuntime().exec(cmd);
 InputStreamReader ir = new InputStreamReader(process
 .getInputStream());
 LineNumberReader input = new LineNumberReader(ir);
 String line;
 while ((line = input.readLine()) != null) {
 System.out.println(line);
 }
 } catch (java.io.IOException e) {
 System.err.println("IOException " + e.getMessage());
 }
 }
 }
但是这个两种方法都有个问题,执行诸如:ps -ef | grep -v grep 带有管道或重定向的命令就会出错。我们都知道使用以上两种方法执行命令时,如果带有参数就要把命令分割成数组或者List传入,不然会被当成一个整体执行 (会出错,比如执行"ps -e")。对于|,<,>号来说,这样做也不行。对于Linux系统,解决方法就是把整个命令都当成sh的参数传入,用sh来执行命令。
List<String> cmds = new ArrayList<String>();
 cmds.add("sh");
 cmds.add("-c");
 cmds.add("ps -ef | grep -v grep");
 ProcessBuilder=new ProcessBuilder(cmds);
 Process p = pb.start();
Windows下把sh换成cmd.exe就行了。
代码如下:
package cn.iigrowing.cmd;
import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.LineNumberReader;
 import java.util.ArrayList;
 import java.util.List;
public class TestCMD {
 public static void main(String[] args) throws IOException,
 InterruptedException {
 try {
 List<String> cmds = new ArrayList<String>();
 cmds.add("sh");
 cmds.add("-c");
 cmds.add("ps -ef | grep eclipse");
 ProcessBuilder pb =new ProcessBuilder(cmds);
 Process p = pb.start();
//Process process = Runtime.getRuntime().exec(c);
 InputStreamReader ir = new InputStreamReader(
 p.getInputStream());
 LineNumberReader input = new LineNumberReader(ir);
 String line;
 while ((line = input.readLine()) != null) {
 System.out.println(line);
 }
} catch (java.io.IOException e) {
 System.err.println("" + e.getMessage());
 }
 }
 }


