我在使用 Java 时遇到了一个奇怪的问题ProcessBuilder
。代码如下所示(稍微简化的形式)
public class Whatever implements Runnable
{
public void run(){
//someIdentifier is a randomly generated string
String in = someIdentifier + "input.txt";
String out = someIdentifier + "output.txt";
ProcessBuilder builder = new ProcessBuilder("./whateveer.sh", in, out);
try {
Process process = builder.start();
process.waitFor();
} catch (IOException e) {
log.error("Could not launch process. Command: " + builder.command(), e);
} catch (InterruptedException ex) {
log.error(ex);
}
}
}
不管什么.sh 内容如下:
R --slave --args $1 $2 <whatever1.R >> r.log
的实例负载Whatever
被提交给一个ExecutorService
固定大小的 (35)。应用程序的其余部分等待它们全部完成——使用CountdownLatch
. 在抛出以下异常之前,一切都运行良好几个小时(Scientific Linux 5.0,java 版本“1.6.0_24”):
java.io.IOException: Cannot run program "./whatever.sh": java.io.IOException: error=11, Resource temporarily unavailable
at java.lang.ProcessBuilder.start(Unknown Source)
... rest of stack trace omitted...
有谁知道这意味着什么?根据 google/bing 的搜索结果java.io.IOException: error=11
,这不是最常见的异常,我完全感到困惑。
我的疯狂且没有那么有根据的猜测是,我有太多线程试图同时启动同一个文件。但是,重现该问题需要数小时的 CPU 时间,因此我没有尝试使用较小的数字。
非常感谢任何建议。