/**
* Copyright (C) 2017-2018 All Rights Reserved.
*/
package processdemo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.List;
public class RuntimeDemo {
public static void main(String[] args) throws IOException, InterruptedException {
/**
* Process + Runtime
* Runtime的exec执行函数也是调用的ProcessBuilder的构造函数来创建子进程并执行
*/
Runtime runtime = Runtime.getRuntime();
//新启一个子进程
Process process = runtime.exec("pwd");
//子进程向主进程输出信息
InputStream inputStream = process.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String temp = null;
while( (temp = bufferedReader.readLine()) != null){
System.out.println(temp);
}
/**
* Process + ProecssBuilder
*/
List cmdList = Arrays.asList("ls","-a");
ProcessBuilder processBuilder = new ProcessBuilder(cmdList);
process = processBuilder.start();
//waitFor()函数是让当前主进程等待该子进程执行完毕,正常退出则返回0
if(process.waitFor() != 0 )
System.exit(1);
//子进程向主进程输出信息
inputStream = process.getInputStream();
bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
while( (temp = bufferedReader.readLine()) != null){
System.out.println(temp);
}
}
}

Runtime是程序运行时环境,不能new一个Runtime对象,只能通过getRuntime()方式获取Runtim运行时对象的引用。

Runtime+Process 和 ProcessBuilder+Process的区别就是运行子进程的命令不相同。