Występuje dziwny problem z Javą ProcessBuilder
. Kod jest przedstawiony poniżej (w nieco uproszczonej formie)java.io.IOException: error = 11
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);
}
}
}
whatever.sh brzmi:
R --slave --args $1 $2 <whatever1.R >> r.log
Ładunki wystąpień Whatever
są przekazywane do ExecutorService
o ustalonej wielkości (35). Reszta aplikacji czeka na zakończenie wszystkich z nich za pomocą CountdownLatch
. Wszystko działa dobrze przez kilka godzin (Scientific Linux 5.0, wersja java „1.6.0_24”) przed wyrzuceniem następujący wyjątek:
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...
Czy ktoś ma pomysł co to oznacza? Na podstawie wyników wyszukiwania google/bing dla java.io.IOException: error=11
, nie jest to najczęstszy wyjątek i jestem całkowicie zaskoczony.
Moje dzikie i niezbyt wykształcone przypuszczenie jest takie, że mam zbyt wiele wątków próbujących uruchomić ten sam plik w tym samym czasie. Jednak odtworzenie problemu zajmuje wiele godzin, więc nie próbowałem używać mniejszej liczby.
Wszelkie sugestie są bardzo mile widziane.
Czy sprawdziłeś otwartą kopię pliku procesu java za pomocą 'lsof'? – lidaobing
Czy to errno 11, czy 12, czy oba? –
Błąd = 11 tylko – mbatchkarov