linux ulimit 与 java 无法正常工作
linux ulimit with java does not work properly
我 运行 代码 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();
}
}
}
此代码returns"unlimited"
但是每当我从终端发出 运行 命令时,我都会得到 1024。
为什么这些数字不同?
如果您 运行 从命令行执行相同的命令,您会得到相同的结果:
$ "/bin/sh" "-c" "ulimit" "-n"
unlimited
这是因为-c
只看紧跟其后的参数,即ulimit
。 -n
不是此参数的一部分,而是指定为位置参数 ([=16=]
)。
对于 运行 ulimit -n
,-n
需要成为该参数的一部分:
$ "/bin/sh" "-c" "ulimit -n"
1024
换句话说,您应该使用:
new String[]{"/bin/sh", "-c", "ulimit -n"}
我 运行 代码 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();
}
}
}
此代码returns"unlimited"
但是每当我从终端发出 运行 命令时,我都会得到 1024。
为什么这些数字不同?
如果您 运行 从命令行执行相同的命令,您会得到相同的结果:
$ "/bin/sh" "-c" "ulimit" "-n"
unlimited
这是因为-c
只看紧跟其后的参数,即ulimit
。 -n
不是此参数的一部分,而是指定为位置参数 ([=16=]
)。
对于 运行 ulimit -n
,-n
需要成为该参数的一部分:
$ "/bin/sh" "-c" "ulimit -n"
1024
换句话说,您应该使用:
new String[]{"/bin/sh", "-c", "ulimit -n"}