Java主人_使用java.lang.Process类的简单例子

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

API方法说明如下:

- destroy() 杀掉子进程。

- exitValue() 返回子进程的出口值。该方法不阻塞,如果此 Process 对象表示的子进程尚未终止,就会抛出IllegalThreadStateException异常,中止进程

- getErrorStream() 获取子进程的错误流

- getInputStream() 获取子进程的输入流

- getOutputStream() 获取子进程的输出流,基本上不会用到输出流

- waitFor() 导致当前线程等待,如有必要,一直要等到由该 Process 对象表示的进程已经终止。导致当前线程等待,如有必要,一直要等到由该 Process对象表示的进程已经终止。如果已终止该子进程,此方法立即返回。如果没有终止该子进程,调用的线程将被阻塞,直到退出子进程

一个简单的例子:

/**

* 列出所有的进程信息

*/

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();

}

}

}

}

程序输出如下:

9919e81542ad34d272f7a0774b5f8bbd.png

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

00a79895bbcd4cc12727b7683cc74ab9.png

注意问题:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值