Java Runtime.getRuntime().exec() fails after calling it several hundred times

ytw picture ytw · Mar 5, 2012 · Viewed 7.2k times · Source

I have a Java program that executes Runtime.getRuntime().exec("ls -l"); many times, once for each directory in the system.

My test system has more than 1,000 directories and Runtime.getRuntime().exec("ls -l"); seems to error out after 480 directories or so. The error message I'm getting is is "Error running exec(). Command: [ls, -l] Working Directory: null Environment: null". I'm guessing it's running out of some required system resources or is it? Is there any way to process all directories without erroring out?

Relative comment from an answer:

I should clarify that I was using Android SDK's adb.exe. I wanted to execute something like Runtime.getRuntime().exec("adb shell ls -l") multiple times on different directories.

Answer

Narendra Yadala picture Narendra Yadala · Mar 5, 2012

You should explicitly close the input/output streams when using 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(); 
    }
}