`
kanpiaoxue
  • 浏览: 1777515 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

java runtime exec 运行挂起的问题

    博客分类:
  • java
 
阅读更多

我写了一个简单的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/

 

  1. public class TESTRuntime {  
  2.       
  3.     public String cmdexeStr = "exp test/test file=d:/daochu.dmp tables=(t_test)";  
  4.       
  5.     public String startRunTime(){  
  6.         try {  
  7.             Process proc = Runtime.getRuntime().exec(cmdexeStr);  
  8.             InputStream errorProcStream = proc.getErrorStream();  
  9.             InputStream outputProcStream = proc.getInputStream();  
  10.             InputStreamReader errorRead = new InputStreamReader(errorProcStream);  
  11.             InputStreamReader outputRead = new InputStreamReader(outputProcStream);  
  12.             BufferedReader errorbr = new BufferedReader(errorRead);  
  13.             String errorline = null;  
  14.                while ((errorline = errorbr.readLine()) != null) {  
  15.                    System.out.println("------error:/n"+errorline);  
  16.                }  
  17.             BufferedReader outputbr = new BufferedReader(outputRead);  
  18.             String outputline = null;  
  19.                while ((outputline = outputbr.readLine()) != null) {  
  20.                    System.out.println("------debug:/n"+outputline);  
  21.                }  
  22.             int num = proc.waitFor();  
  23.             System.out.println("------num:"+num);                          
  24.                         proc.destroy();   
  25.                      } catch (Exception e) {  
  26.             // TODO Auto-generated catch block  
  27.             e.printStackTrace();  
  28.         }  
  29.         return null;  
  30.     }  
  31.       
  32.     public static void main(String[] args) {   
  33.         System.out.println("------------start run--------------");  
  34.         TESTRuntime test = new TESTRuntime();  
  35.         test.startRunTime();  
  36.         System.out.println("------------end run--------------");  
  37.     }  
  38.   
  39. }  
分享到:
评论

相关推荐

    java执行可执行文件,Runtime.exec、ProcessBuilder、commons-exec

    本文将详细介绍三种常用的方法:`Runtime.exec()`、`ProcessBuilder`以及`commons-exec`库。 #### 1. 使用`Runtime.exec()` `Runtime.exec()`是最为传统且简单的执行外部程序的方法。它可以启动一个新的进程,并...

    Java Runtime Environment JRE 1.4.2

    Java Runtime Environment (JRE) 1.4.2 是Java应用程序执行所需的关键组件,它为开发者和用户提供了在各种操作系统上运行Java应用的基础。这个版本是Sun Microsystems在2004年发布的一个重要里程碑,它在Java技术的...

    Java Runtime Environment1.8.0

    Java Runtime Environment 1.8.0是Java开发和运行应用程序必不可少的一部分,它是Oracle公司发布的Java平台标准版(Java SE)的实现。这个版本是32位的,这意味着它设计用于在32位操作系统上运行,比如Windows XP、...

    64位 java runtime 1.8.0.zip

    Java Runtime Environment(JRE)是Java程序运行所需的基础组件,它是Oracle公司提供的Java平台标准版(Java SE)的一部分。在本例中,我们讨论的是64位版本的JRE 1.8.0,适用于Windows操作系统。这个版本的JRE包含...

    Java Runtime Environment 1.6.0.7 (32-bit

    Java Runtime Environment(JRE)是Java程序运行所需的基础组件,由Oracle公司提供。1.6.0.7 版本是针对32位操作系统的一个特定发行版,这意味着它设计用于在32位Windows系统上执行Java应用程序。在这个版本中,Java...

    32位的Java Runtime Environment

    总结来说,32位的Java Runtime Environment在32位操作系统中起着至关重要的作用,为运行Java应用程序提供必要环境。随着技术的发展,尽管64位环境逐渐成为主流,但32位JRE仍然在特定场景下保持着其价值。理解和掌握...

    Java使用Runtime.exec()给Windows命令提示符做了个外壳,真的很山寨!

    在Java编程中,`Runtime.exec()`方法是一个非常实用的功能,它允许我们执行操作系统级别的命令。这篇博客"Java使用Runtime.exec()给Windows命令提示符做了个外壳,真的很山寨!"探讨了如何利用`Runtime.exec()`来...

    java runtime environment 1.8.0_45 64bit

    - 开发者应确保他们的Java应用与目标用户的JRE版本兼容,避免因版本不匹配导致的运行问题。 9. **性能优化**: - 每个Java更新都会包含一些性能优化,比如垃圾收集算法的改进,以提高应用的运行效率。 10. **...

    Java Runtime Environment-6.0

    Java Runtime Environment-6.0.26.exe

    java runtime environment 1.8.0_45 64bit.rar

    Java Runtime Environment(JRE)是Java程序运行所需的基础组件,它是Oracle公司提供的Java平台标准版(Java SE)的一部分。在本例中,我们讨论的是版本1.8.0_45,这是一个64位的版本,专为64位操作系统设计。这个...

    java runtime 最新版 1.8.0.271

    Java Runtime Environment(JRE)是运行Java应用程序所必需的基础组件,它包含了Java虚拟机(JVM)、类库以及其他支持Java程序运行的组件。最新版"1.8.0.271"是Oracle公司发布的Java SE 8的一个更新版本,主要用于...

    Java Runtime For MacOS X 10.7

    Java Runtime For MacOS X 10.7

    java runtime environment(JRE)安装 2020-11-4

    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 由于...

    JNA方式调用dll报错:A fatal error has been detected by the Java Runtime Environment:

    当出现"A fatal error has been detected by the Java Runtime Environment"这样的错误时,通常意味着在运行时发生了严重的问题,可能是由于内存溢出、无效的指针引用或其他系统级别的异常。 这个问题可能源于以下...

    64位的Java Runtime Environment

    Java Runtime Environment(JRE)是Java程序运行所需的基础软件组件,它包含了Java虚拟机(JVM)、类库以及其他支持Java应用程序执行的组件。64位的Java Runtime Environment是为了在64位操作系统上运行Java程序而...

    Java运行环境 Java SE Runtime Environment 8.0.172.x86官方多语言正式版

    Java SE Runtime Environment(运行时环境)包含了运行以 Java 编程语言编写的程序所必需的 Java 虚拟机、运行时类库和 Java 应用程序启动器。 Java 平台的安全性 一个由角色提供的安全信息的描述。适用于开发人员...

    Java Runtime Environment-6.0.450.rar

    Java Runtime Environment(JRE)是Java程序运行所必需的基础组件,它包含了Java虚拟机(JVM)、类库以及Java程序运行所需的各种服务。在本例中,我们关注的是版本6.0.450,这是一个相对早期的版本,但它仍然在许多...

    Java Runtime Environment 8u201 - jre8 64位

    Java Runtime Environment(JRE)是Java程序运行所需的基础组件,它包含了Java虚拟机(JVM)、类库以及其他支持Java应用程序执行的必要组件。标题提到的"Java Runtime Environment 8u201"是指Java 8的第201次更新,...

    Java运行环境 Java SE Runtime Environment 8.0.172.x64官方多语言正式版

    Java SE Runtime Environment(运行时环境)包含了运行以 Java 编程语言编写的程序所必需的 Java 虚拟机、运行时类库和 Java 应用程序启动器。 Java 平台的安全性 一个由角色提供的安全信息的描述。适用于开发人员...

Global site tag (gtag.js) - Google Analytics