Java子进程—(二)子进程执行终端命令

/**
 * 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<String> 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的区别就是运行子进程的命令不相同。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。