展开全部

构造方法摘要

ProcessBuilder(List command)

利用指定的操作系统程序和参数62616964757a686964616fe59b9ee7ad9431333361303031构造一个进程生成器。

ProcessBuilder(String... command)

利用指定的操作系统程序和参数构造一个进程生成器。

方法摘要

List command()

返回此进程生成器的操作系统程序和参数。

ProcessBuilder command(List command)

设置此进程生成器的操作系统程序和参数。

ProcessBuilder command(String... command)

设置此进程生成器的操作系统程序和参数。

File directory()

返回此进程生成器的工作目录。

ProcessBuilder directory(File directory)

设置此进程生成器的工作目录。

Map environment()

返回此进程生成器环境的字符串映射视图。

boolean redirectErrorStream()

通知进程生成器是否合并标准错误和标准输出。

ProcessBuilder redirectErrorStream(boolean redirectErrorStream)

设置此进程生成器的 redirectErrorStream 属性。

Process start()

使用此进程生成器的属性启动一个新进程。

2.1.2 Runtime

每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。可以通过 getRuntime 方法获取当前运行时。

应用程序不能创建自己的 Runtime 类实例。但可以通过 getRuntime 方法获取当前Runtime运行时对象的引用。一旦得到了一个当前的Runtime对象的引用,就可以调用Runtime对象的方法去控制Java虚拟机的状态和行为。

Java代码

void addShutdownHook(Thread hook)

注册新的虚拟机来关闭挂钩。

int availableProcessors()

向 Java 虚拟机返回可用处理器的数目。

Process exec(String command)

在单独的进程中执行指定的字符串命令。

Process exec(String[] cmdarray)

在单独的进程中执行指定命令和变量。

Process exec(String[] cmdarray, String[] envp)

在指定环境的独立进程中执行指定命令和变量。

Process exec(String[] cmdarray, String[] envp, File dir)

在指定环境和工作目录的独立进程中执行指定的命令和变量。

Process exec(String command, String[] envp)

在指定环境的单独进程中执行指定的字符串命令。

Process exec(String command, String[] envp, File dir)

在有指定环境和工作目录的独立进程中执行指定的字符串命令。

void exit(int status)

通过启动虚拟机的关闭序列,终止当前正在运行的 Java 虚拟机。

long freeMemory()

返回 Java 虚拟机中的空闲内存量。

void gc()

运行垃圾回收器。

InputStream getLocalizedInputStream(InputStream in)

已过时。 从 JDK 1.1 开始,将本地编码字节流转换为 Unicode 字符流的首选方法是使用 InputStreamReader 和 BufferedReader 类。

OutputStream getLocalizedOutputStream(OutputStream out)

已过时。 从 JDK 1.1 开始,将 Unicode 字符流转换为本地编码字节流的首选方法是使用 OutputStreamWriter、BufferedWriter 和 PrintWriter 类。

static Runtime getRuntime()

返回与当前 Java 应用程序相关的运行时对象。

void halt(int status)

强行终止目前正在运行的 Java 虚拟机。

void load(String filename)

加载作为动态库的指定文件名。

void loadLibrary(String libname)

加载具有指定库名的动态库。

long maxMemory()

返回 Java 虚拟机试图使用的最大内存量。

boolean removeShutdownHook(Thread hook)

取消注册某个先前已注册的虚拟机关闭挂钩。

void runFinalization()

运行挂起 finalization 的所有对象的终止方法。

static void runFinalizersOnExit(boolean value)

已过时。 此方法本身具有不安全性。它可能对正在使用的对象调用终结方法,而其他线程正在操作这些对象,从而导致不正确的行为或死锁。

long totalMemory()

返回 Java 虚拟机中的内存总量。

void traceInstructions(boolean on)

启用/禁用指令跟踪。

void traceMethodCalls(boolean on)

启用/禁用方法调用跟踪。

2.1.3 Process

不管通过那种方法启动进程后,都会返回一个Process类的实例代表启动的进程,该实例可用来控制进程并获得相关信息。Process 类提供了执行从进程输入、执行输出到进程、等待进程完成、检查进程的退出状态以及销毁(杀掉)进程的方法:

Java代码

void destroy()

杀掉子进程。

一般情况下,该方法并不能杀掉已经启动的进程,不用为好。

int exitValue()

返回子进程的出口值。

只有启动的进程执行完成、或者由于异常退出后,exitValue()方法才会有正常的返回值,否则抛出异常。

InputStream getErrorStream()

获取子进程的错误流。

如果错误输出被重定向,则不能从该流中读取错误输出。

InputStream getInputStream()

获取子进程的输入流。

可以从该流中读取进程的标准输出。

OutputStream getOutputStream()

获取子进程的输出流。

写入到该流中的数据作为进程的标准输入。

int waitFor()

导致当前线程等待,如有必要,一直要等到由该 Process 对象表示的进程已经终止。

通过该类提供的方法,可以实现与启动的进程之间通信,达到交互的目的。

2.2 实例

2.2.1 创建子进程

要创建子进程可以通过使用使用ProcessBuilder的start()方法和Runtime的exec()方法。

(1)Runtime.exec()

Java代码

import java.io.BufferedReader;

import java.io.File;

import java.io.InputStreamReader;

public class Test1 {

public static void main(String[] args) {

try {

Process p = null;

String line = null;

BufferedReader stdout = null;

//list the files and directorys under C:\

p = Runtime.getRuntime().exec("CMD.exe /C dir", null, new File("C:\\"));

stdout = new BufferedReader(new InputStreamReader(p

.getInputStream()));

while ((line = stdout.readLine()) != null) {

System.out.println(line);

}

stdout.close();

//echo the value of NAME

p = Runtime.getRuntime().exec("CMD.exe /C echo %NAME%", new String[] {"NAME=TEST"});

stdout = new BufferedReader(new InputStreamReader(p

.getInputStream()));

while ((line = stdout.readLine()) != null) {

System.out.println(line);

}

stdout.close();

} catch (Exception e) {

e.printStackTrace();

}

}

(2)ProcessBuilder

Java代码

import java.io.BufferedReader;

import java.io.File;

import java.io.InputStreamReader;

import java.util.ArrayList;

import java.util.List;

public class Test2 {

public static void main(String[] args) {

try {

List list = new ArrayList();

ProcessBuilder pb = null;

Process p = null;

String line = null;

BufferedReader stdout = null;

//list the files and directorys under C:\

list.add("CMD.EXE");

list.add("/C");

list.add("dir");

pb = new ProcessBuilder(list);

pb.directory(new File("C:\\"));

p = pb.start();

stdout = new BufferedReader(new InputStreamReader(p

.getInputStream()));

while ((line = stdout.readLine()) != null) {

System.out.println(line);

}

stdout.close();

//echo the value of NAME

pb = new ProcessBuilder();

pb.command(new String[] {"CMD.exe", "/C", "echo %NAME%"});

pb.environment().put("NAME", "TEST");

p = pb.start();

stdout = new BufferedReader(new InputStreamReader(p

.getInputStream()));

while ((line = stdout.readLine()) != null) {

System.out.println(line);

}

stdout.close();

} catch (Exception e) {

e.printStackTrace();

}

}

从启动其他程序的Java进程看,已启动的其他程序输出就是一个普通的输入流,可以通过getInputStream()和getErrorStream来获取。对于一般输出文本的进程来说,可以将InputStream封装成BufferedReader,然后就可以一行一行的对进程的标准输出进行处理。

通常,一个程序/进程在执行结束后会向操作系统返回一个整数值,0一般代表执行成功,非0表示执行出现问题。有两种方式可以用来获取进程的返回值。一是利用waitFor(),该方法是阻塞的,执导进程执行完成后再返回。该方法返回一个代表进程返回值的整数值。另一个方法是调用exitValue()方法,该方法是非阻塞的,调用立即返回。但是如果进程没有执行完成,则抛出异常。

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

java实现进程管理_用java来实现一个进程管理系统相关推荐

  1. java批量事物管理_[疯狂Java]JDBC:事务管理、中间点、批量更新

    1. 数据库事务的概念: 1) 事务的目的就是为了保证数据库中数据的完整性: 2) 设想一个银行转账的过程,如果分两步,第一步是A的账户-1000,第二步是B的账户+1000,这两个动作必须是连贯的, ...

  2. 【详细解读】进程管理 -死锁问题 系统有三个进程:A B C 这3个进程都需要5个系统资源。如果系统至少有多少个资源,则不可能发生死锁

    进程管理 -死锁问题 系统有三个进程:A B C 这3个进程都需要5个系统资源.如果系统至少有多少个资源,则不可能发生死锁? 最多的状态是:每个进程恰好都分到了四个资源, 都只需要一个资源就可以运行, ...

  3. java 相册管理_基于JAVA的B/S网络相册管理系统

    每天记录学习,每天会有好心情.*^_^* 今天和一个朋友共同完成了一个网络相册管理系统项目,我们在开发时选用的框架是SSM(MYECLIPSE)框架.我这个朋友知识有限,只会这个框架,哈哈,都是为了方 ...

  4. java defunct怎么杀掉_杀死Linux中的defunct进程(僵尸进程)的方法指南

    一.什么是defunct进程(僵尸进程)在 Linux 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他,那么他将变成一个僵尸进程.当用ps命令观察进程的执行状态时 ...

  5. java pdf插件下载_免费java pdf控件

    云原生的概念和理论体系非常的完备,but talk is cheap , show me the code ! 但是作为一名程序员,能动手的咱绝对不多BB,虽然talk并不cheap , 能跟不同层次 ...

  6. java编写k线_用Java绘制K线 (转)

    ---- Java语言中的Applet(Java小程序)和Application(Java应用程序)是在结构和功能上都存在很大差异的两种不同的编程方式.Applet应用于Web页上,可做出多姿多彩的页 ...

  7. java ee开发环境_设置Java EE 6开发环境

    java ee开发环境 本教程简要说明了如何设置典型的环境来开发基于Java EE 6的应用程序. 除了可以正常工作的Windows XP客户端具有足够的CPU能力和内存外,本教程没有其他先决条件. ...

  8. java编写k线_用Java绘制K线图

    [IT168技术文档] Java语言中的Applet(Java小程序)和Application(Java应用程序)是在结构和功能上都存在很大差异的两种不同的编程方式.Applet应用于Web页上,可做 ...

  9. java编写k线_用Java绘制K线

    Java语言中的Applet(Java小程序)和Application(Java应用程序)是在结构和功能上都存在很大差异的两种不同的编程方式.Applet应用于Web页上,可做出多姿多彩的页面特效,给 ...

最新文章

  1. Winder摆杆不稳除了PID还可能的原因
  2. c语言顺序表有效元素长度,用C语言描述的顺序表类型
  3. 公司用的 MySQL 团队开发规范
  4. 量子计算陷入难解困境,未来发展何去何从?
  5. Android学习笔记-Wifi网络操作
  6. mysql各种错误提示码和解决方法
  7. Struts2 method=get方法乱码
  8. m227fdw恢复出厂设置_惠普M227fdw使用说明
  9. bootstrap搜索框:click下拉展开改hover展开(两种代码)
  10. 放大器的传递函数_这么酷,采用极致小巧的运算放大器设计麦克风电路!
  11. 史上最便捷搭建 Zookeeper 的方法!
  12. 想要导航提示页_如何优化网站导航呢?
  13. Atitit 重大问题解决法---记不住问题的解决 目录 1. 记不住的原因 1 2. 大脑存储内容分布 2 2.1. Jvm的存储机制 2 2.2. 人的存储机制 2 2.2.1. 图片区视觉区
  14. html表单作业练习
  15. TeamViewer正版许可证到底多少钱?
  16. plugin插件的安装和使用
  17. 解决删除凭据管理器后仍然可以访问问题
  18. 战神网络 战神引擎 手游研究院 获取该区补丁失败 如何解决
  19. linux,ubuntu下软件的更新命令
  20. 网站攻击的常见形式及应对方法

热门文章

  1. 不到30行 JS 实现一个炫酷的全景交互
  2. k8s 重启策略、健康检查、环境变量、初始化容器
  3. Orangepi Zero2 全志H616(驱动蜂鸣器)
  4. MyBatis之RowBounds实现分页查询
  5. Intellij IDEA 安装配置(超详细)
  6. java算法的实际应用,工程中的算法应用 - 简单的三个例子
  7. NETCore入门系列(自定义IHtmlHelper、TagHelper、PartialView和ViewComponent)
  8. 如何使用 二次号查询API
  9. linux sockaddr结构体,网络编程之sockaddr_ll结构体 | 人人学技术
  10. python从文件初始化失败_Python 初始化失败