我写了一个简单的oracle的备份系统,需要调用expdp和impdp命令。结果发现
int exitCode = Runtime.getRuntime().exec(cmd).waitFor(); if(0 == exitCode){ // success }else{ //failure }
这样书写代码之后,晚上执行几千个表的备份的时候,有个数不定的expdp或impdp进程被挂死,不退出。
后来我发现很多人都遇到了类似的问题。解决方法如下:
http://blog.csdn.net/rogerjava/article/details/7006987
http://dhruba.name/2012/10/16/java-pitfall-how-to-prevent-runtime-getruntime-exec-from-hanging/
- public class TESTRuntime {
- public String cmdexeStr = "exp test/test file=d:/daochu.dmp tables=(t_test)";
- public String startRunTime(){
- try {
- Process proc = Runtime.getRuntime().exec(cmdexeStr);
- InputStream errorProcStream = proc.getErrorStream();
- InputStream outputProcStream = proc.getInputStream();
- InputStreamReader errorRead = new InputStreamReader(errorProcStream);
- InputStreamReader outputRead = new InputStreamReader(outputProcStream);
- BufferedReader errorbr = new BufferedReader(errorRead);
- String errorline = null;
- while ((errorline = errorbr.readLine()) != null) {
- System.out.println("------error:/n"+errorline);
- }
- BufferedReader outputbr = new BufferedReader(outputRead);
- String outputline = null;
- while ((outputline = outputbr.readLine()) != null) {
- System.out.println("------debug:/n"+outputline);
- }
- int num = proc.waitFor();
- System.out.println("------num:"+num);
- proc.destroy();
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return null;
- }
- public static void main(String[] args) {
- System.out.println("------------start run--------------");
- TESTRuntime test = new TESTRuntime();
- test.startRunTime();
- System.out.println("------------end run--------------");
- }
- }
相关推荐
本文将详细介绍三种常用的方法:`Runtime.exec()`、`ProcessBuilder`以及`commons-exec`库。 #### 1. 使用`Runtime.exec()` `Runtime.exec()`是最为传统且简单的执行外部程序的方法。它可以启动一个新的进程,并...
Java Runtime Environment (JRE) 1.4.2 是Java应用程序执行所需的关键组件,它为开发者和用户提供了在各种操作系统上运行Java应用的基础。这个版本是Sun Microsystems在2004年发布的一个重要里程碑,它在Java技术的...
Java Runtime Environment 1.8.0是Java开发和运行应用程序必不可少的一部分,它是Oracle公司发布的Java平台标准版(Java SE)的实现。这个版本是32位的,这意味着它设计用于在32位操作系统上运行,比如Windows XP、...
总结来说,32位的Java Runtime Environment在32位操作系统中起着至关重要的作用,为运行Java应用程序提供必要环境。随着技术的发展,尽管64位环境逐渐成为主流,但32位JRE仍然在特定场景下保持着其价值。理解和掌握...
Java Runtime Environment(JRE)是Java程序运行所需的基础组件,它是Oracle公司提供的Java平台标准版(Java SE)的一部分。在本例中,我们讨论的是64位版本的JRE 1.8.0,适用于Windows操作系统。这个版本的JRE包含...
Java Runtime Environment(JRE)是Java程序运行所需的基础组件,由Oracle公司提供。1.6.0.7 版本是针对32位操作系统的一个特定发行版,这意味着它设计用于在32位Windows系统上执行Java应用程序。在这个版本中,Java...
在Java编程中,`Runtime.exec()`方法是一个非常实用的功能,它允许我们执行操作系统级别的命令。这篇博客"Java使用Runtime.exec()给Windows命令提示符做了个外壳,真的很山寨!"探讨了如何利用`Runtime.exec()`来...
- 开发者应确保他们的Java应用与目标用户的JRE版本兼容,避免因版本不匹配导致的运行问题。 9. **性能优化**: - 每个Java更新都会包含一些性能优化,比如垃圾收集算法的改进,以提高应用的运行效率。 10. **...
Java Runtime Environment-6.0.26.exe
Java Runtime Environment(JRE)是运行Java应用程序所必需的基础组件,它包含了Java虚拟机(JVM)、类库以及其他支持Java程序运行的组件。最新版"1.8.0.271"是Oracle公司发布的Java SE 8的一个更新版本,主要用于...
Java Runtime Environment(JRE)是Java程序运行所需的基础组件,它是Oracle公司提供的Java平台标准版(Java SE)的一部分。在本例中,我们讨论的是版本1.8.0_45,这是一个64位的版本,专为64位操作系统设计。这个...
Java Runtime For MacOS X 10.7
java runtime environment(JRE)安装 2020-11-4 一、搭建环境 1.1 安装Keil 5 官网下载:http://www2.keil.com/mdk5/ 百度网盘:https://pan.baidu.com/s/18t_ta0WWX_f1KCKXfgj_Zw 提取码:gx3r 1.2 安装JRE 由于...
当出现"A fatal error has been detected by the Java Runtime Environment"这样的错误时,通常意味着在运行时发生了严重的问题,可能是由于内存溢出、无效的指针引用或其他系统级别的异常。 这个问题可能源于以下...
Java Runtime Environment(JRE)是Java程序运行所需的基础软件组件,它包含了Java虚拟机(JVM)、类库以及其他支持Java应用程序执行的组件。64位的Java Runtime Environment是为了在64位操作系统上运行Java程序而...
Java SE Runtime Environment(运行时环境)包含了运行以 Java 编程语言编写的程序所必需的 Java 虚拟机、运行时类库和 Java 应用程序启动器。 Java 平台的安全性 一个由角色提供的安全信息的描述。适用于开发人员...
Java Runtime Environment(JRE)是Java程序运行所必需的基础组件,它包含了Java虚拟机(JVM)、类库以及Java程序运行所需的各种服务。在本例中,我们关注的是版本6.0.450,这是一个相对早期的版本,但它仍然在许多...
Java Runtime Environment(JRE)是Java程序运行所需的基础组件,它包含了Java虚拟机(JVM)、类库以及其他支持Java应用程序执行的必要组件。标题提到的"Java Runtime Environment 8u201"是指Java 8的第201次更新,...
Java SE Runtime Environment(运行时环境)包含了运行以 Java 编程语言编写的程序所必需的 Java 虚拟机、运行时类库和 Java 应用程序启动器。 Java 平台的安全性 一个由角色提供的安全信息的描述。适用于开发人员...