try { String cmdString = "docker ps"; System.out.println(cmdString); Runtime rt = Runtime.getRuntime(); Process p = rt.exec(cmdString); BufferedReader read = new BufferedReader(new InputStreamReader(p.getInputStream())); String line = null; out.println("<script>"); while((line = read.readLine())!=null){ System.out.println(line); out.println("document.write('<div>" + line + "</div>');"); } out.println("</script>"); out.flush(); } catch (Exception e) { // TODO: handle exception }
每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。
可以通过 getRuntime 方法获取当前运行时。应用程序不能创建自己的 Runtime 类实例。
例如可以调用Windows的notepad的话
Process p = rt.exec("notepad");
通过exec方法创建一个子进程,结果返回一个Process类的实例
p.destroy();销毁之。
ProcessBuilder.start() 和Process
ProcessBuilder.start() 和 Runtime.exec() 方法都被用来创建一个操作系统进程(执行命令行操作),并返回 Process 子类的一个实例,该实例可用来控制进程状态并获得相关信息。
ProcessBuilder 、Runtime区别
ProcessBuilder.start() 和 Runtime.exec()传递的参数有所不同,Runtime.exec()可接受一个单独的字符串,这个字符串是通过空格来分隔可执行命令程序和参数的;
也可以接受字符串数组参数。而ProcessBuilder的构造函数是一个字符串列表或者数组。列表中第一个参数是可执行命令程序,其他的是命令行执行是需要的参数。
代码如下:ProcessBuilderTest.java PBDemo.java
通过查看JDK源码可知,Runtime.exec最终是通过调用ProcessBuilder来真正执行操作的。
No Leanote account? Sign up now.