java - 在 java 中,出现错误 "Cannot run program "/bin/sh“: java. io.IOException : error=24, 打开的文件太多”

标签 java shell

我正在使用以下代码连续运行 shell 脚本。

String[] process = new String[] {"/bin/sh", "-c","pgrep httpd" };
Process proc = new ProcessBuilder(process).start();
InputStreamReader input = new InputStreamReader(proc
        .getInputStream());
BufferedReader reader = new BufferedReader(input);
String line = reader.readLine();
reader.close();
input.close();

在线程中运行此代码时,我收到错误消息

MESSAGE: Too many open files
java.net.SocketException: Too many open files

Cannot run program "/bin/sh": java.io.IOException: error=24, Too many open files.

如何避免这个问题。

最佳答案

发生这种情况的原因有很多:

  1. 您可以打开的文件数量可能有限制。您可能需要增加/etc/security/limits.conf 文件中允许打开的文件数。

  2. 如果您在一个循环中连续运行它,那么它可能会导致大量进程的产生。您可能希望 int exitValue = p.waitFor() 等待过程来完成。

关于java - 在 java 中,出现错误 "Cannot run program "/bin/sh“: java. io.IOException : error=24, 打开的文件太多”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6274970/

相关文章:

linux - 对 Shell 脚本的一些疑问。

bash - 在ubuntu上的sh中将读取变量转换为小写

linux - 在 cronjob 中为相机设置时间

bash - bash 脚本出错时触发函数

java - 在 spring xml 配置中定义 guava HashBasedTable/Table

java - 在 for 循环中查找值的最大值/最小值

java - 为什么 FileOutputStream 在文件开头添加空字符和传输结束字符?

java - 带有 websphere 的 jBPM

java - 实用程序类静态方法和继承

linux - 别名没有任何影响