Обычно я использую этот код для запуска сценария bash и получения его вывода
ProcessBuilder pb = new ProcessBuilder("/home/myscript");
Process p = pb.start();
BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
String inputRead;
p.waitFor();
while((inputRead=stdInput.readLine()) != null){
Helper.log(inputRead);
}
Это работает нормально, но на этот раз сценарий bash, который я использую, не завершился. Он всегда активен и при обнаружении чего-либо распечатывает это. Я хочу запустить скрипт, подождать некоторое время, а затем проверить, обнаружил ли он что-нибудь. Я пробовал использовать p.wait(periode);
Я пробовал этот код
p.wait(10000);
while((inputRead=stdInput.readLine()) != null){
Helper.log(inputRead);
}
Я не уверен, что это правильное решение моей проблемы, но в любом случае я получаю сообщение об ошибке с этим кодом
java.lang.IllegalMonitorStateException
На самом деле мой вопрос не в ожидании, а в том, как остановить процесс после ожидания и при этом получить результат.
Object.wait()
объектаProcess
- хорошая идея? Это не так - этот метод имеет совершенно другое назначение и имеет предварительное условие, что вам нужно удерживать монитор на объекте (синхронизировать по нему). Но это не решение вашей проблемы. - person Erwin Bolwidt   schedule 17.10.2016