调用它几百次后,Java Runtime.getRuntime().exec()失败

ytw*_*ytw 4 java android exec runtime.exec

我有一个Java程序执行Runtime.getRuntime().exec("ls -l"); 很多次,一次为系统中的每个目录.

我的测试系统有超过1,000个目录和Runtime.getRuntime().exec("ls -l"); 似乎在480个目录之后出错了.我得到的错误消息是"运行exec()时出错.命令:[ls,-l]工作目录:null环境:null".我猜它已经耗尽了一些必需的系统资源,或者是吗?有没有办法处理所有目录而不会出错?

答案的相对评论:

我应该澄清一下我使用的是Android SDK的adb.exe.我想在不同的目录上多次执行Runtime.getRuntime().exec("adb shell ls -l")之类的东西.

Nar*_*ala 7

使用时应明确关闭输入/输出流Runtime.getRuntime().exec.

Process p = null;
try {
    p = Runtime.getRuntime().exec("ls -l");
    //process output here
    p.waitFor();
} finally {
    if (p != null) {
        p.getOutputStream().close();
        p.getInputStream().close();
        p.getErrorStream().close(); 
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 而不是`destroy()`进程,我建议使用`waitFor()`让它们正常完成.使用`destroy()`"强制终止"该过程,除非您知道该过程不起作用,否则这是一件非常重要的事情. (2认同)