我使用以下代码连续运行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.
如何避免此问题。
答案 0 :(得分:4)
这可能由于多种原因而发生:
允许打开的文件数量可能有限制。您可能需要在/etc/security/limits.conf文件中增加允许的打开文件数。
如果你在一个循环中连续运行它,那么它可能会导致大量进程的spwanning。你可能希望int exitValue = p.waitFor()
等待进程完成。
答案 1 :(得分:3)
尝试以下模式,看看它发生了什么:
try {
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();
int rc = proc.waitFor();
reader.close();
input.close();
} catch (IOException e) {
e.printStackTrace(); // or log it, or otherwise handle it
} catch (InterruptedException ie) {
ie.printStackTrace(); // or log it, or otherwise handle it
}
答案 2 :(得分:-1)
这是系统问题尝试谷歌。 “linux太多打开的文件” 您必须增加值,该值指定一次可以打开多少文件(在您的操作系统中) 你可能会找到类似“/ proc / sys / fs / file-max”
的东西