Linux Ulimit с Java не работает должным образом - PullRequest
0 голосов
/ 01 июня 2018

Я запускаю код в 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();
    }
}
}

этот код возвращает "неограниченное"

, но всякий раз, когда я запускаю команду из терминала, я получаю 1024.

Почему этицифры разные?

1 Ответ

0 голосов
/ 01 июня 2018

Вы получите тот же результат, если выполните ту же команду из командной строки:

$ "/bin/sh" "-c" "ulimit" "-n"
unlimited

Это потому, что -c просматривает только тот аргумент, который следует сразу за ним, то есть ulimit.-n не является частью этого аргумента и вместо этого назначается в качестве позиционного параметра ($0).

Для запуска ulimit -n -n должен быть частью этого аргумента:

$ "/bin/sh" "-c" "ulimit -n"
1024

Другими словами, вы должны использовать:

new String[]{"/bin/sh", "-c", "ulimit -n"}
...