为什么在从Java

时间:2015-07-28 10:07:04

标签: java bash

这是我的程序,我在mac系统上运行它。

public static void main(String args[]) throws IOException {
    Scanner scanner=new Scanner(new File("annotated_sentences.csv"));
    int count=0;
    scanner.nextLine();
    while (scanner.hasNextLine()) {
        String line = scanner.nextLine();

        String split[]= line.split(",");
        String text = split[4];
        text=text.replace("&", "#");
        Runtime run = Runtime.getRuntime();
        Process proc = run.exec(new String[]{"/bin/bash", "-c",
            "curl --data text="+text+" https://gate.d5.mpi-inf.mpg.de/aida/service/disambiguate > /StanfordFile/"+count});

        count++;
    }
    scanner.close();
}

我希望处理大约30000行,但每次到335时都会处理。例外情况就出来了。

Exception in thread "main" java.io.IOException: Cannot run program "/bin/bash": error=2, No such file or directory
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1042)
    at java.lang.Runtime.exec(Runtime.java:620)
    at java.lang.Runtime.exec(Runtime.java:485)
    at ProcessStanford.main(ProcessStanford.java:20)
Caused by: java.io.IOException: error=2, No such file or directory
    at java.lang.UNIXProcess.forkAndExec(Native Method)
    at java.lang.UNIXProcess.<init>(UNIXProcess.java:185)
    at java.lang.ProcessImpl.start(ProcessImpl.java:134)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1023)
    ... 3 more

是什么原因?

1 个答案:

答案 0 :(得分:0)

受到评论的启发,我发现问题是因为我打开了太多的进程一次并且&#34; bin / bash&#34;无法同时处理它们。经过多次测试,我发现在2分钟内运行100个进程是安全的(因为平均来说,处理请求的云服务的速度是1个请求/ 2分钟)。所以我只添加了一行if(count%100==0)TimeUnit.MINUTES.sleep(2);并解决了问题。