Поиск жестких и мягких ограничений открытого файла изнутри jvm в linux (ulimit -n и ulimit -Hn)

У меня есть проблема, когда мне нужно выяснить жесткие и мягкие ограничения открытых файлов для процесса в linux из программы java / groovy. Когда я выполняю ulimit из терминала, он дает отдельные значения для жестких и мягких ограничений открытого файла.

$ ulimit -n
1024
$ ulimit -Hn
4096

Но, если я выполняю его в groovy, он игнорирует мягкий предел и всегда возвращает жесткое предельное значение.

groovy> ['bash', '-c', 'ulimit -n'].execute().text  
Result: 4096

groovy> ['bash', '-c', 'ulimit -Hn'].execute().text 
Result: 4096

Пожалуйста, дайте мне знать, если я что-то упустил. Я использовал Ubuntu 12.04, Groovy Версия: 1.8.4 JVM: 1.6.0_29 для этого выполнения.

Update: I tried the same thing in Java.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.StringWriter;
import java.io.Writer;

public class LinuxInteractor {
    public static int executeCommand(String command, boolean waitForResponse, OutputHandler handler) {
        int shellExitStatus = -1;
        ProcessBuilder pb = new ProcessBuilder("bash", "-c", command);
        pb.redirectErrorStream(true);
        try {
            Process shell = pb.start();

            if (waitForResponse) {

                // To capture output from the shell
                InputStream shellIn = shell.getInputStream();

                // Wait for the shell to finish and get the return code
                shellExitStatus = shell.waitFor();

                convertStreamToStr(shellIn, handler);
                shellIn.close();
            }
        }

        catch (IOException e) {
            System.out
                    .println("Error occured while executing Linux command. Error Description: "
                            + e.getMessage());
        }
        catch (InterruptedException e) {
            System.out
                    .println("Error occured while executing Linux command. Error Description: "
                            + e.getMessage());
        }
        return shellExitStatus;
    }

    public static String convertStreamToStr(InputStream is, OutputHandler handler) throws IOException {

        if (is != null) {
            Writer writer = new StringWriter();

            char[] buffer = new char[1024];
            try {
                Reader reader = new BufferedReader(new InputStreamReader(is,
                        "UTF-8"));
                int n;
                while ((n = reader.read(buffer)) != -1) {
                    String output = new String(buffer, 0, n);
                    writer.write(buffer, 0, n);

                    if(handler != null)
                        handler.execute(output);
                }
            } finally {
                is.close();
            }
            return writer.toString();
        } else {
            return "";
        }
    }

    public abstract static class OutputHandler {
        public abstract void execute(String str);
    }

    public static void main(String[] args) {
        OutputHandler handler = new OutputHandler() {
            @Override
            public void execute(String str) {
                System.out.println(str);
            }
        };

        System.out.print("ulimit -n : ");
        LinuxInteractor.executeCommand("ulimit -n", true, handler);
        System.out.print("ulimit -Hn : ");
        LinuxInteractor.executeCommand("ulimit -Hn", true, handler);
    }

}

Выход для этой программы:

$ java LinuxInteractor 
ulimit -n : 4096

ulimit -Hn : 4096

Почему в Java такое же поведение? Является ли java установкой ulimit случайно? Заранее спасибо.

Ответы на вопрос(1)

Ваш ответ на вопрос