文档章节

Java多进程

twins
 twins
发布于 2014/06/03 12:46
字数 771
阅读 158
收藏 0

    ProcessBuilder.start() 和 Runtime.exec() 方法都被用来创建一个操作系统进程(执行命令行操作),并返回 Process 子类的一个实例,该实例可用来控制进程状态并获得相关信息。

   关键类:Process,ProcessBuilder,Runtime

   1. Process 类提供了执行从进程输入、执行输出到进程、等待进程完成、检查进程的退出状态以及销毁(杀掉)进程的方法。创建进程的方法可能无法针对某些本机平台上的特定进程很好地工作,比如,本机窗口进程,守护进程,Microsoft Windows 上的 Win16/DOS 进程,或者 shell 脚本。创建的子进程没有自己的终端或控制台。它的所有标准 io(即 stdin、stdout 和 stderr)操作都将通过三个流 (getOutputStream()、getInputStream() 和 getErrorStream()) 重定向到父进程。父进程使用这些流来提供到子进程的输入和获得从子进程的输出。因为有些本机平台仅针对标准输入和输出流提供有限的缓冲区大小,如果读写子 进程的输出流或输入流迅速出现失败,则可能导致子进程阻塞,甚至产生死锁。 当没有 Process 对象的更多引用时,不是删掉子进程,而是继续异步执行子进程。 对于带有 Process 对象的 Java 进程,没有必要异步或并发执行由 Process 对象表示的进程。

  2.每个ProcessBuilder实例管理一个进程属性集。ProcessBuilder的start()方法利用这些属性创建一个新的Process实例。start()方法可以从同一实例重复调用,以利用相同或者相关的属性创建新的子进程。

  3.ProcessBuilder.start() 和 Runtime.exec()传递的参数有所不同,Runtime.exec()可接受一个单独的字符串,这个字符串是通过空格来分隔可执行命令程序和参数的;也可以接受字符串数组参数。而ProcessBuilder的构造函数是一个字符串列表或者数组。列表中第一个参数是可执行命令程序,其他的是命令行执行是需要的参数。通过查看JDK源码可知,Runtime.exec最终是通过调用ProcessBuilder来真正执行操作的。
  关键方法:

  

p = Runtime.getRuntime().exec(cmd);   
// 取得命令结果的输出流   
InputStream fis = p.getInputStream();   
// 用一个读输出流类去读   
InputStreamReader isr = new InputStreamReader(fis);   
// 用缓冲器读行   
BufferedReader br = new BufferedReader(isr);   
String line = null;   
// 直到读完为止   
while ((line = br.readLine()) != null) {   
       System.out.println(line);   
}   


ProcessBuilder pb = new ProcessBuilder("java", "-jar", "Test3.jar");   
// 让这个进程的工作区空间改为F:\dist   
// 这样的话,它就会去F:\dist目录下找Test.jar这个文件   
pb.directory(new File("F:\\dist"));   
// 得到进程生成器的环境 变量,这个变量我们可以改,   
// 改了以后也会反应到新起的进程里面去   
Map<String, String> map = pb.environment();   
Process p1 = pb.start();   
// 然后就可以对p做自己想做的事情了   
// 自己这个时候就可以退出了   
System.exit(0);



© 著作权归作者所有

共有 人打赏支持
twins
粉丝 5
博文 92
码字总数 27330
作品 0
哈尔滨
程序员
私信 提问
Java Tomcat vs PHP CLI Server 性能对比

测试环境: Ubuntu 14.04 with i5-3230M Tomcat 8.0.5 with 64bit jre1.7.0_55 PHP 5.5.8 with Zend OPcache v7.0.3-dev 测试脚本: 显示当前服务器时间 Java Tomcat: t.jsp <%@ page session=......

eechen
2014/09/22
0
34
android -------- java虚拟机和Dalvik虚拟机

java虚拟机 虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java虚...

切切歆语
2018/04/29
0
0
JAVA中的多线程能在多核CPU机器上并行执行吗?JVM能不能够将线程安排到不同的CPU上去运行呢?

JAVA中的多线程能在多核CPU机器上并行执行吗?注意,我说的不是并发执行哦 。我们用java写一个多线程程序,就启动了一个JVM进程,所以这些线程都是在这一个JVM进程之中的,我不知道同一时刻,...

_星仔
2018/08/20
377
2
Linux ---> 监控JVM工具

JDK内置工具使用 jps(Java Virtual Machine Process Status Tool) 查看所有的jvm进程,包括进程ID,进程启动的路径等等。 jstack(Java Stack Trace) ① 观察jvm中当前所有线程的运行情况和线...

shking
2013/10/10
0
0
Java的多进程运行模式分析

一般我们在java中运行其它类中的方法时,无论是静态调用,还是动态调用,都是在当前的进程中执行的,也就是说,只有一个java虚拟机实例在运行。而 有的时候,我们需要通过java代码启动多个j...

精华之王
2009/04/11
78
0

没有更多内容

加载失败,请刷新页面

加载更多

Linux Wireshark普通用户启动使用方案

当系统安装好Wireshark后请正常启动是否可以进行正常使用,如果不行请参考下列指导 向系统添加一个用户组 sudo groupadd wireshark //如提示此组存在可跳过 将指定用户添加到这个组中 sudo...

CHONGCHEN
8分钟前
0
0
CSS 选择器参考手册

CSS 选择器参考手册 选择器 描述 [attribute] 用于选取带有指定属性的元素。 [attribute=value] 用于选取带有指定属性和值的元素。 [attribute~=value] 用于选取属性值中包含指定词汇的元素。...

Jack088
今天
1
0
数据库篇一

数据库篇 第1章 数据库介绍 1.1 数据库概述  什么是数据库(DB:DataBase) 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据...

stars永恒
今天
2
0
Intellij IDEA中设置了jsp页面,但是在访问页面时却提示404

在Intellij IDEA中设置了spring boot的jsp页面,但是在访问时,却出现404,Not Found,经过查找资料后解决,步骤如下: 在Run/Debug Configurations面板中设置该程序的Working Directory选项...

uknow8692
昨天
3
0
day24:文档第五行增内容|每月1号压缩/etc/目录|过滤文本重复次数多的10个单词|人员分组|

1、在文本文档1.txt里第五行下面增加如下内容;两个方法; # This is a test file.# Test insert line into this file. 分析:给文档后增加内容,可以用sed 来搞定;也可以用while do done...

芬野de博客
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部