I run code on linux ubuntu 17.10
public class TestExec { public static void main(String[] args) { try { Process p = Runtime.getRuntime().exec(new String[]{"/bin/sh", "-c", "ulimit", "-n"}); BufferedReader in = new BufferedReader( new InputStreamReader(p.getInputStream())); String line = null; while ((line = in.readLine()) != null) { System.out.println(line); } } catch (IOException e) { e.printStackTrace(); } } }
this code returns “unlimited”
but whenever I run command from terminal I get 1024.
Why those numbers are different?
Advertisement
Answer
You get the same result if you run the same command from the command line:
$ "/bin/sh" "-c" "ulimit" "-n" unlimited
This is because -c
only looks at the argument immediately following it, which is ulimit
. The -n
is not part of this argument, and is instead instead assigned as a positional parameter ($0
).
To run ulimit -n
, the -n
needs to be part of that argument:
$ "/bin/sh" "-c" "ulimit -n" 1024
In other words, you should be using:
new String[]{"/bin/sh", "-c", "ulimit -n"}