- 浏览: 707676 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (272)
- Struts1.x (7)
- 事务 (2)
- Hibernate (11)
- 数据库 (14)
- JavaScript&Ajax (43)
- JSP&Servlet (2)
- Flex (1)
- 其它 (9)
- Java (22)
- 框架集成 (1)
- WebService (3)
- Tomcat (3)
- 加密和安全登录 (13)
- 基于原型的JavaScript (0)
- JavaDoc和Java编码规范 (3)
- CAS (1)
- 加密 (1)
- Axis2 (10)
- Ext2.x (3)
- SSH整合 (2)
- Ext (0)
- 正则表达式 (1)
- 设计模式 (4)
- 对象序列化技术 (3)
- CVS (2)
- Struts2 (6)
- Spring 2.x (7)
- Spring Security (2)
- Java 课程 (20)
- 程序员之死 (1)
- 软件测试 (6)
- UML (5)
- NetBeans (1)
- cxf (1)
- JMS (13)
- 设计 (5)
- ibatis2.x (3)
- Oracle (1)
- WebSphere (7)
- 概要设计 (1)
- DB2 (10)
- PowerDesigner (0)
- 软件工程 (5)
- rose (1)
- EA (1)
- LDAP (7)
- Portal&Portlet (3)
- MQ (10)
- ESB (4)
- EJB (2)
- JBoss (2)
最新评论
-
typeRos:
只有配置文件,没有代码么大神
Spring实现IBMMQ的JMS消息发布/订阅模式 -
panamera:
如果ActiveMQ服务器没有启动,这个时候消息生产者使用Jm ...
Spring JMSTemplate 与 JMS 原生API比较 -
lian819:
顶1楼, 引用文件, 配置属性, 太方便了
EXTJS 同步和异步请求 -
wilhard:
说得清楚明白
<%@ include file=""%>与<jsp:include page=""/>区别 -
刘琛颖:
总结的很好。受益了
javascript 父窗口(父页面)— 子窗口 (子页面)互相调用的方法
一、概述
Process类是一个抽象类(所有的方法均是抽象的),封装了一个进程(即一个执行程序)。
Process 类提供了执行从进程输入、执行输出到进程、等待进程完成、检查进程的退出状态以及销毁(杀掉)进程的方法。
ProcessBuilder.start() 和 Runtime.exec 方法创建一个本机进程,并返回 Process 子类的一个实例,该实例可用来控制进程并获取相关信息。
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 对象表示的进程已经终止。
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();
}
}
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();
}
}
这下行了吧,呵呵!
发表评论
-
org.apache.commons.lang.StringUtils
2011-05-06 09:33 2596org.apache.commons.lang ... -
[转贴] 数据安全的关键:责任分离
2011-04-22 16:33 1305[转贴] 数据安全的关键 ... -
Log4j配置详解
2010-09-10 17:27 878原文地址:http://blog.chin ... -
深入研究java.lang.Runtime类
2010-07-24 06:52 1097原文地址:http://lavasoft. ... -
java.util.NavigableSet和NavigableMap
2010-07-03 13:41 2779Java 6对Nevigable接口做了 ... -
遍历 Map 的 N 种方式
2010-07-03 08:46 1793import java.util.HashMap;import ... -
Tomcat内存溢出的原因
2010-06-18 13:37 980在生产环境中tomcat内存设置不好很容易出现 ... -
使用继承的注意点
2010-04-18 22:39 1036为了保证父类 ... -
JDK1.5 新增静态导入语法说明
2010-04-18 18:05 1396JDK1.5 以后新增加一种静态导入语法,用来导入指定 ... -
深入了解JAVA可变长度的参数(Varargs)
2010-03-24 09:34 1640(本文转载自csdn) 到J2SE 1.4为止,一直无法在J ... -
Sun 公司制定的 Java 虚拟机规范在技术上规定的 JVM 的统一标准
2010-03-23 23:25 1063Sun 公司制定的 Java 虚拟机规范在技术上规定了 ... -
ArrayList Vector LinkedList 区别与用法
2010-03-20 16:02 836ArrayList 和Vector是采用数组方式存储数据,此 ... -
如何判断字符串是否由纯数字组成(Java版本)
2010-02-03 13:45 4058public static boolean isNumeri ... -
Properties/ClassLoader
2010-01-15 16:08 1121Properties.list(PrintWriter out ... -
Map.Entry 类使用简介
2009-11-11 17:51 2305你是否已经对每次从Map中取得关键字然后再取得相应的值 ... -
List、Set、数组之间的转换
2009-04-06 15:21 1374原文地址: http://hi.baidu.c ... -
Java生成随机字母和数字
2009-02-27 20:47 5571功能: 生成随机的字母和数字混杂的字符串 函数的入参是生成的随 ... -
java版本的escape和unescape函数
2009-02-16 18:21 3568// java版本的escape和unescape函数 cl ... -
String.split()用法的一点经验
2008-11-13 11:20 1627在java.lang包中有String.split()方法,返 ... -
Java clone技术
2008-08-21 16:53 0Clone基本知识储备 在Java里提 ...
相关推荐
Java.lang.Process 类深入研究 Java.lang.Process 类是 Java 类库中的一个核心部分,它提供了执行从进程输入、执行输出到进程、等待进程完成、检查进程的退出状态以及销毁(杀掉)进程的方法。下面将对 Process 类...
在深入研究这个类之前,我们首先了解其主要功能和特性。 1. **命令与参数**: `ProcessBuilder`类的核心是命令列表,这是一个字符串数组,用于指定要执行的外部程序及其参数。例如,如果你想要运行`ls`命令并传入...
在IT行业中,进程是操作系统资源管理的基本单位,它代表了一个正在执行的...通过分析"СuggestionProvider.java",我们可以深入研究它的设计和实现,了解如何在Java中有效地创建和管理进程,以及如何构建测试提供者。
- **类与对象**:Java是一种面向对象的编程语言,资源管理器程序的核心部分可能由多个类组成,每个类代表特定的功能或数据结构,如CPUUsage类、Process类等。 - **异常处理**:在读取和处理系统资源时,可能会遇到...
- **并发编程**:深入研究`Thread`类及其相关接口,如`Runnable`、`Callable`等,理解同步机制和锁的概念。 - **异常处理**:学习如何正确地使用异常处理机制,了解自定义异常的创建方法。 总之,Java核心API的学习...
在Java中,`java.lang.ProcessBuilder`和`java.lang.Process`类可以用来创建和管理操作系统级别的进程。通过这个示例,我们可以学习如何启动外部程序,传递参数,读取其标准输出和错误输出,甚至控制进程的生命周期...
Java 9 API 下载标志着Java开发的一个新里程碑。在Java 8的基础上,Java 9引入了许多新特性,改进了性能,增强了模块系统...因此,无论你是新手还是经验丰富的开发者,都值得深入研究Java 9 API,以提升你的编程技能。
除了使用系统命令,还可以通过JNI或Java的`java.lang.ProcessBuilder`类来实现更复杂的操作。JNI允许Java代码直接调用本地库,这样可以直接操作操作系统内核,但这需要对C/C++有一定了解。而`ProcessBuilder`类提供...
在Java中,`java.lang.management.ManagementFactory`类提供了获取进程信息的接口,如`OperatingSystemMXBean`和`RuntimeMXBean`,可以获取到JVM及其宿主操作系统的相关信息。对于Node.js环境,可以借助`child_...
- JDK9对`java.lang.Process`类进行了增强,提供了更强大的进程管理能力,如读取进程环境变量,控制标准输入/输出流等。 - `ProcessHandle`类允许获取和管理操作系统级别的进程信息。 3. **JShell:交互式REPL...
对于经验丰富的开发者,可以深入研究新的API和性能优化,提升开发效率和代码质量。 总之,JDK 9.0.4官方文档是学习和掌握Java新特性的宝贵资源,通过深入阅读和实践,开发者能够更好地适应Java技术的发展趋势,提升...
《深入解析Android底层代码:libcore详解》 ...理解libcore的运作机制对于深入研究Android系统和开发高性能应用至关重要。通过持续学习和实践,开发者可以更好地利用libcore的优势,为用户提供更优质的应用体验。
var mainThread = Java.use('java.lang.Thread').currentThread(); console.log('主线程ID: ' + mainThread.getId()); }); ``` 使用`frida工具`或Python API将脚本加载到目标进程中。 4. **附加到进程** - ...
8. **进程API增强**:Java 9扩展了`java.lang.Process`类,增加了对进程输入、输出和错误流的并发读写支持,以及更好的资源管理能力。 9. **G1垃圾收集器的改进**:Java 9对G1垃圾收集器进行了优化,提高了应用的...