使用java.lang.Process类的简单例子

ProcessBuilder类是J2SE 1.5在java.lang中新添加的一个新类,此类用于建立操做系统进程,它提供一种启动和管理进程(也就是应用程序)的方法。在J2SE 1.5以前,都是由Process类处来实现进程的控制管理。本文简单介绍一下Process类的用法以及一些须要注意的问题。java

API方法说明以下:
- destroy() 杀掉子进程。
- exitValue() 返回子进程的出口值。该方法不阻塞,若是此 Process 对象表示的子进程还没有终止,就会抛出IllegalThreadStateException异常,停止进程
- getErrorStream() 获取子进程的错误流
- getInputStream() 获取子进程的输入流
- getOutputStream() 获取子进程的输出流,基本上不会用到输出流
- waitFor() 致使当前线程等待,若有必要,一直要等到由该 Process 对象表示的进程已经终止。致使当前线程等待,若有必要,一直要等到由该 Process对象表示的进程已经终止。若是已终止该子进程,此方法当即返回。若是没有终止该子进程,调用的线程将被阻塞,直到退出子进程segmentfault

一个简单的例子:工具

/**
 * 列出全部的进程信息
 */
public class ListAllProcessTest {
    public static void main(String[] args) {
        BufferedReader br = null;
        Process process = null;
        try {
            process = Runtime.getRuntime().exec("tasklist");
            br = new BufferedReader(new InputStreamReader(process.getInputStream(), "GBK"));
            String line = null;
            System.out.println("列出全部正在运行的进程信息:");
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            if(process!=null){
                process.destroy();
            }
        }
    }
}

程序输出以下:
程序输出图ui

直接在WIN7的命令行执行命令:tasklist,输出结果以下:
控制台输出图spa

注意问题:
由于有些本机平台仅针对标准输入和输出流提供有限的缓冲区大小,若是读写子进程的输出流或输入流迅速出现失败,则可能致使子进程阻塞,甚至产生死锁。为了防止进程无限阻塞或者死锁,使用Process类时,须要加上超时控制,详细内容能够看博文《Process工具类,提供设置timeout功能》操作系统

相关文章
相关标签/搜索