一、Process类
ProcessBuilder.start()创建一个本机进程,并返回一个Process子类的一个实例,该实例可以获取进程的相关信息,也可以控制进程。这个进程没有自己的终端,它的操作结果io都重定向到了它的父进程,父进程通过getInputStream(),getOutputStream(),getErrorStream()为子进程提供输入和获取输出,而对于io流如果有缓冲大小限制,则可能出现阻塞,导致死锁情况。
可使用destory()方式强制杀掉子进程,exitValue()返回执行结果,如果子进程需要等待返回,调用waitFor()方法将当前线程等待,直到子进程退出。
二、Runtime类
Runtime.getRuntime().exec() 获得的就是Process类,exec()方法有多个重载可以使用,针对不同的情况设置不同的参数。另外需要注意的是执行的windows和linux的明林的写法是不同的。
public static voidmain(String[] args) {
String command= "notepad.exe txt.txt";try{
Process process=Runtime.getRuntime().exec(command);
BufferedInputStream bis= newBufferedInputStream(
process.getInputStream());
BufferedReader br= new BufferedReader(newInputStreamReader(bis));
String line;while ((line = br.readLine()) != null) {
System.out.println(line);
}
process.waitFor();if (process.exitValue() != 0) {
System.out.println("error!");
}
bis.close();
br.close();
}catch(IOException e) {//TODO Auto-generated catch block
e.printStackTrace();
}catch(InterruptedException e) {//TODO Auto-generated catch block
e.printStackTrace();
}
}
三、Apache Common-Exec