zoukankan      html  css  js  c++  java
  • [转载]使用java.lang.Process类的简单例子

    FROM: http://segmentfault.com/blog/lidonghao/1190000000372192

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

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

    一个简单的例子:

     1 /**
     2  * 列出所有的进程信息
     3  */
     4 public class ListAllProcessTest {
     5     public static void main(String[] args) {
     6         BufferedReader br = null;
     7         Process process = null;
     8         try {
     9             process = Runtime.getRuntime().exec("tasklist");
    10             br = new BufferedReader(new InputStreamReader(process.getInputStream(), "GBK"));
    11             String line = null;
    12             System.out.println("列出所有正在运行的进程信息:");
    13             while ((line = br.readLine()) != null) {
    14                 System.out.println(line);
    15             }
    16         } catch (IOException e) {
    17             e.printStackTrace();
    18         } finally {
    19             if (br != null) {
    20                 try {
    21                     br.close();
    22                 } catch (Exception e) {
    23                     e.printStackTrace();
    24                 }
    25             }
    26             if(process!=null){
    27                 process.destroy();
    28             }
    29         }
    30     }
    31 }
    View Code

    程序输出如下:
    程序输出图

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

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

  • 相关阅读:
    CENTOS7下安装REDIS
    目录结构和文件路径
    bash特性
    (十六)MySQL集群galera实现
    (十五)mysql中间件MyCAT实现
    (4)三剑客之awk
    (十四)基于GTID的主从复制
    (十三)MySQL主从复制
    (3)三剑客之sed
    (十二)MySQL逻辑备份mysqldump
  • 原文地址:https://www.cnblogs.com/wmx3ng/p/4138242.html
Copyright © 2011-2022 走看看