文档章节

研究java.lang.ProcessBuilder类

五大三粗
 五大三粗
发布于 2015/06/15 15:53
字数 1196
阅读 24
收藏 0
点赞 0
评论 0
一、概述
      ProcessBuilder类是J2SE 1.5在java.lang中新添加的一个新类,此类用于创建操作系统进程,它提供一种启动和管理进程(也就是应用程序)的方法。在J2SE 1.5之前,都是由Process类处来实现进程的控制管理。
      每个 ProcessBuilder 实例管理一个进程属性集。它的start() 方法利用这些属性创建一个新的 Process 实例。start() 方法可以从同一实例重复调用,以利用相同的或相关的属性创建新的子进程。 (我在《深入研究java.lang.Runtime类》中讲过,进程也可以由Runtime.exec()启动。)
 
每个进程生成器(即ProcessBuilder对象)管理这些进程属性:
命令 是一个字符串列表,它表示要调用的外部程序文件及其参数(如果有)。在此,表示有效的操作系统命令的字符串列表是依赖于系统的。例如,每一个总体变量,通常都要成为此列表中的元素,但有一些操作系统,希望程序能自己标记命令行字符串——在这种系统中,Java 实现可能需要命令确切地包含这两个元素。 
环境 是从变量 到值 的依赖于系统的映射。初始值是当前进程环境的一个副本(请参阅 System.getenv())。 
工作目录。默认值是当前进程的当前工作目录,通常根据系统属性 user.dir 来命名。 
redirectErrorStream 属性。最初,此属性为 false,意思是子进程的标准输出和错误输出被发送给两个独立的流,这些流可以通过 Process.getInputStream() 和 Process.getErrorStream() 方法来访问。如果将值设置为 true,标准错误将与标准输出合并。这使得关联错误消息和相应的输出变得更容易。在此情况下,合并的数据可从 Process.getInputStream() 返回的流读取,而从 Process.getErrorStream() 返回的流读取将直接到达文件尾。
 
      既然有Process类,那为什么还要发明个ProcessBuilder类呢?ProcessBuilder和Process两个类有什么区别呢?
原来,ProcessBuilder为进程提供了更多的控制,例如,可以设置当前工作目录,还可以改变环境参数。而Process的功能相对来说简单的多。
      ProcessBuilder是一个final类,有两个带参数的构造方法,你可以通过构造方法来直接创建ProcessBuilder的对象。而Process是一个抽象类,一般都通过Runtime.exec()和ProcessBuilder.start()来间接创建其实例。
 
注意:
      修改进程构建器的属性将影响后续由该对象的 start() 方法启动的进程,但从不会影响以前启动的进程或 Java 自身的进程。
      ProcessBuilder类不是同步的。如果多个线程同时访问一个 ProcessBuilder,而其中至少一个线程从结构上修改了其中一个属性,它必须 保持外部同步。
 
很容易启动一个使用默认工作目录和环境的新进程:
 Process p = new ProcessBuilder("myCommand", "myArg").start();
下面是一个利用修改过的工作目录和环境启动进程的例子:
 ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2");
 Map<String, String> env = pb.environment();
 env.put("VAR1", "myValue");
 env.remove("OTHERVAR");
 env.put("VAR2", env.get("VAR1") + "suffix");
 pb.directory("myDir");
 Process p = pb.start();
 要利用一组明确的环境变量启动进程,在添加环境变量之前,首先调用 Map.clear()。 
 
二、API预览
     构造方法摘要 
    ProcessBuilder(List<String> command) 
      利用指定的操作系统程序和参数构造一个进程生成器。 
    ProcessBuilder(String... command) 
      利用指定的操作系统程序和参数构造一个进程生成器。
 
     方法摘要 
    command() 
      返回此进程生成器的操作系统程序和参数。 
    command(List<String> command) 
      设置此进程生成器的操作系统程序和参数。 
    command(String... command) 
      设置此进程生成器的操作系统程序和参数。 
    directory() 
      返回此进程生成器的工作目录。 
    directory(File directory) 
      设置此进程生成器的工作目录。 
    environment() 
      返回此进程生成器环境的字符串映射视图。 
    redirectErrorStream() 
      通知进程生成器是否合并标准错误和标准输出。 
    redirectErrorStream(boolean redirectErrorStream) 
      设置此进程生成器的 redirectErrorStream 属性。 
    start() 
      使用此进程生成器的属性启动一个新进程。
 
三、常见应用
      若要使用ProcessBuilder创建一个进程,只需要创建ProcessBuilder的一个实例,指定该进程的名称和所需参数。要执行此程序,调用该实例上的start()即可。下面上一个执行Windows记事本的例子。注意它将要编辑的文件名指定为一个参数。
class PBDemo { 
         public  static  void main(String args[]) { 
                 try { 
                        ProcessBuilder proc =  new ProcessBuilder( "notepad.exe""testfile"); 
                        proc.start(); 
                }  catch (Exception e) { 
                        System.out.println( "Error executing notepad."); 
                } 
        } 
}

© 著作权归作者所有

共有 人打赏支持
五大三粗
粉丝 157
博文 2215
码字总数 4578339
作品 0
广州
程序员
【政策】北京市科委发布最新征集新一代人工智能、脑认知与类脑技术等六大领域储备课题

去年,在国家层面频频出台一系列人工智能发展规划政策后,2018年地方进入政策落地实施阶段。 11日,北京市科委发布六份通知,征集2018年六大技术领域储备课题,这六大领域分别为: ①认知与类...

技术小能手
01/12
0
0
研究java.lang.Process类

一、概述 Process类是一个抽象类(所有的方法均是抽象的),封装了一个进程(即一个执行程序)。 Process 类提供了执行从进程输入、执行输出到进程、等待进程完成、检查进程的退出状态以及销...

五大三粗
2015/06/15
0
0
服用避孕药改变你的理想型?调查发现并非如此

  一项新的研究发现,异性恋女性倾向于青睐更为传统的阳刚的男性面孔,并且这种偏好与她们是否口服避孕药无关。   本周《心理科学》(Psychological Science)上的一篇新论文表示,以往关...

DeepTech深科技
05/10
0
0
worldwind for java 探究之导入文件生成图层

因为工作需要,研究学习了worldwind for java,worldwind for java是一个开源代码,资料很少,如果想基于这个做点东西只能自己去研究源码然后根据自己的需要进行完善和修改,以下是我研究过程...

lost的熊猫
2015/02/26
0
0
SpringCloud调研系列5.2:服务网关Zuul组合API之Filter研究

上一节,研究了Zuul转发请求的例子,这一节,开始研究Zuul进行API组合。 咨询了下朋友,说是可以基于filter来做这个事情,所以接下来研究filter. --- 首先研究下正常情况下,就是我们自己不增...

强子哥哥
2016/12/02
664
0
国务院印发《关于全面加强基础科学研究的若干意见》

经李克强总理签批,国务院日前印发《关于全面加强基础科学研究的若干意见》(以下简称《意见》),对全面加强基础科学研究作出部署。 《意见》要求,要全面贯彻党的十九大精神,以习近平新时...

中国政府网
01/31
0
0
将眼动追踪加入Vive头显,Tobii Pro推出VR研究工具

这款VR研究工具可以用于心理学、消费者行为和人类表现等方面,是低成本、高效率的解决方案。 最近,Tobii Pro推出一款新的研究工具,可用于沉浸式VR研究。这种沉浸式VR研究与传统的研究方式大...

行者武松
03/06
0
0
连发5文回应!《Nature》子刊撤回轰动一时的CRISPR脱靶效应论文

  去年,在《自然-方法》杂志上发表的一项关于CRISPR脱靶效应的研究引起了学术界广泛的讨论和争议。来自哥伦比亚大学等机构的研究人员发现,在治愈小鼠相关疾病遗传性疾病的同时,基因编辑...

DeepTech深科技
04/07
0
0
【转】 .Net Micro Framework 快速入门

.Net Micro Framework 快速入门 收藏 一、简介 Microsoft .NET Micro Framework 2001年由微软研究院开始研发,并随后在其MSN Direct项目中使用该技术,2007年9月微软对外发布2.0,2008年10月...

夏春涛
2011/02/27
0
0
应用软件的设计与实现中需要涉及的主要研究方法有哪些。

论文中的开题报告中有研究方法步骤和措施这一个大项,对于研究方法来说有哪些是比较适合或者说在应用类软件的设计与开发过程中需要运用那些研究方法?

燃烧的浅蓝
2014/02/25
201
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Crontab作业时间设置

今天,遇到这么一个题目,周一到周五的9:00-16:59之间,每隔两分钟将某个命令运行一次。给的答案是: */2 9-16 * * 1-5 /usr/sbin/somecommand dosomething 乍一看,这个答案不对,应...

大别阿郎
6分钟前
0
0
ES17-JAVA API文档管理

1.保存文档 可以通过json工具把java对象转换成json字符串进行保存,也可以通过内置的帮助类直接构建json格式 /** * 获取客户端 * * @return */public static TransportClie...

贾峰uk
7分钟前
0
0
Python代码规范和命名规范

前言 Python 学习之旅,先来看看 Python 的代码规范,让自己先有个意识,而且在往后的学习中慢慢养成习惯 一、简明概述 1、编码 如无特殊情况, 文件一律使用 UTF-8 编码 如无特殊情况, 文件头...

blackfoxya
9分钟前
0
0
联动滑动之一:NestScrollChild和NestedScrollingParent

NestScrollChild和NestedScrollingParent 吐槽一下开源中国竟然标题字数有限制 由于项目中使用了CoordinateLayout来解决联动以及实现炫酷的UI效果,那么必须就要研究一波源码了,毕竟知其然知...

JerryLin123
27分钟前
1
0
cloudera spark2.2 读写hbase

cloudera spark2.2 读写hbase 例子 host = 'bigdata-03,bigdata-05,bigdata-04'conf = { "hbase.zookeeper.quorum": host, "hbase.mapreduce.inputtable": "student1"}k......

osenlin
31分钟前
0
0
数据库规范化

转载自 一个小时学会MySQL数据库 地址:http://www.cnblogs.com/best/p/6517755.html 截取其中 1.4 部分 用于自己学习使用 感谢作者:张果 1.4、数据库规范化 经过一系列的步骤,我们现在终于...

十万猛虎下画山
32分钟前
0
0
ios逆向之工具篇

Reveal:查看任意app的UI结构 注:1.不越狱的手机,可以用Reveal来查看自己app的UI结构,不能查看其它app的结构。 2.越狱手机上可以查看任意app的UI结构。 IDA:反编译工具 从App Store下载的...

HeroHY
33分钟前
0
0
EOS区块链平台智能合约示例HelloWorld

我们将介绍一个使用EOS智能合约构建hello World的例子。 一般环境设置通过上一篇文章已经说明,这方面的问题大家可以看本博客上一篇文章,本文引用了官方EOS在Git上的示例。 运行nodeos 要通...

笔阁
35分钟前
1
0
Scrapy爬虫框架简单解析 

scrapy框架解析 Scrapy框架大致包括以下几个组件:Scrapy Engine、Spiders、Scheduler、Item Pipeline、Downloader; 组件 Scrapy Engine 这是框架的核心,负责控制数据流在整个系统的各个组...

zhujun2017
35分钟前
0
0
Vue之ref详解与实例

尽管存在 prop 和事件,有的时候你仍可能需要在 JavaScript 里直接访问一个子组件。为了达到这个目的,你可以通过 ref 特性为这个子组件赋予一个 ID 引用。ref可以加在父级组件上也可以加在子...

tianyawhl
44分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部