文档章节

研究java.lang.Process类

五大三粗
 五大三粗
发布于 2015/06/15 15:53
字数 773
阅读 20
收藏 1
一、概述
      Process类是一个抽象类(所有的方法均是抽象的),封装了一个进程(即一个执行程序)。
      Process 类提供了执行从进程输入、执行输出到进程、等待进程完成、检查进程的退出状态以及销毁(杀掉)进程的方法。
      ProcessBuilder.start() 和 Runtime.exec 方法创建一个本机进程,并返回 Process 子类的一个实例,该实例可用来控制进程并获取相关信息。
      创建进程的方法可能无法针对某些本机平台上的特定进程很好地工作,比如,本机窗口进程,守护进程,Microsoft Windows 上的 Win16/DOS 进程,或者 shell 脚本。创建的子进程没有自己的终端或控制台。它的所有标准 io(即 stdin,stdout,stderr)操作都将通过三个流 (getOutputStream(),getInputStream(),getErrorStream()) 重定向到父进程。父进程使用这些流来提供到子进程的输入和获得从子进程的输出。因为有些本机平台仅针对标准输入和输出流提供有限的缓冲区大小,如果读写子进程的输出流或输入流迅速出现失败,则可能导致子进程阻塞,甚至产生死锁。
      当没有 Process 对象的更多引用时,不是删掉子进程,而是继续异步执行子进程。
二、API预览
 destroy() 
   杀掉子进程。 
 exitValue() 
   返回子进程的出口值。 
 InputStream getErrorStream() 
   获得子进程的错误流。 
 InputStream getInputStream() 
   获得子进程的输入流。 
 OutputStream getOutputStream() 
   获得子进程的输出流。 
 waitFor() 
   导致当前线程等待,如果必要,一直要等到由该 Process 对象表示的进程已经终止。
三、如何创建Process对象,一般有一下两种方法:
1、每个 ProcessBuilder 实例管理一个进程属性集。start() 方法利用这些属性创建一个新的 Process 实例。start() 方法可以从同一实例重复调用,以利用相同的或相关的属性创建新的子进程。(ProcessBuilder这个是JDK5中新添加的final类,详细请参看“深入研究java.lang.ProcessBuilder类”一文。
2、Runtime.exec() 方法创建一个本机进程,并返回 Process 子类的一个实例。详细请参看“深入研究java.lang.Runtime类”一文。
四、实例
 
import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 

/** 
* 控制台处理工具箱 

* @author leizhimin 2009-6-25 14:12:14 
*/
 
public  final  class CmdToolkit { 
         private  static Log log = LogFactory.getLog(CmdToolkit. class); 

         private CmdToolkit() { 
        } 

         /** 
         * 读取控制命令的输出结果 
         * 
         * @param cmd                命令 
         * @param isPrettify 返回的结果是否进行美化(换行),美化意味着换行,默认不进行美化,当此参数为null时也不美化, 
         * @return 控制命令的输出结果 
         * @throws IOException 
         */
 
         public  static String readConsole(String cmd, Boolean isPrettify)  throws IOException { 
                StringBuffer cmdout =  new StringBuffer(); 
                log.info( "执行命令:" + cmd); 
                Process process = Runtime.getRuntime().exec(cmd);      //执行一个系统命令 
                InputStream fis = process.getInputStream(); 
                BufferedReader br =  new BufferedReader( new InputStreamReader(fis)); 
                String line =  null
                 if (isPrettify ==  null || isPrettify) { 
                         while ((line = br.readLine()) !=  null) { 
                                cmdout.append(line); 
                        } 
                }  else { 
                         while ((line = br.readLine()) !=  null) { 
                                cmdout.append(line).append(System.getProperty( "line.separator")); 
                        } 
                } 
                log.info( "执行系统命令后的结果为:\n" + cmdout.toString()); 
                 return cmdout.toString().trim(); 
        } 
}

© 著作权归作者所有

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

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

技术小能手
01/12
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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

qduoj~前端~二次开发~打包docker镜像并上传到阿里云容器镜像仓库

上一篇文章https://my.oschina.net/finchxu/blog/1930017记录了怎么在本地修改前端,现在我要把我的修改添加到部署到本地的前端的docker容器中,然后打包这个容器成为一个本地镜像,然后把这...

虚拟世界的懒猫
今天
1
0
UML中 的各种符号含义

Class Notation A class notation consists of three parts: Class Name The name of the class appears in the first partition. Class Attributes Attributes are shown in the second par......

hutaishi
今天
1
0
20180818 上课截图

小丑鱼00
今天
1
0
Springsecurity之SecurityContextHolderStrategy

注:下面分析的版本是spring-security-4.2.x,源码的github地址是: https://github.com/spring-projects/spring-security/tree/4.2.x 先上一张图: 图1 SecurityContextHolderStrategy的三个......

汉斯-冯-拉特
今天
1
0
LNMP架构(Nginx负载均衡、ssl原理、生成ssl密钥对、Nginx配置ssl)

Nginx负载均衡 网站的访问量越来越大,服务器的服务模式也得进行相应的升级,比如分离出数据库服务器、分离出图片作为单独服务,这些是简单的数据的负载均衡,将压力分散到不同的机器上。有时...

蛋黄_Yolks
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部