小编典典

带有Java的Linux ulimit无法正常工作

java

我在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。

为什么这些数字不同?


阅读 273

收藏
2020-11-30

共1个答案

小编典典

如果从命令行运行相同的命令,则会得到相同的结果:

$ "/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"}
2020-11-30