Закрытие Java-подпроцесса, когда вызывающая программа завершает работу / вылетает
Я собираю многоязычную систему, но сталкиваюсь с проблемами с потерянными процессами.
Мой код состоит из Python-программы, вызывающей Java-программу, по каналу связи между двумя программами; Java-программа является постоянной, а не разовой. Обычно все работает, но мне нужно закрыть программу на Java, если программа Python преждевременно завершает работу.
Я думаю, что лучший способ сделать это - закрыть Java-программу, если она не может обнаружить канал stdin между программами, но я не могу этого сделать.
Соответствующий код Python:
javaInterface = subprocess.Popen(["pathtojavaprogram"], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
Соответствующий Java-код; Я хочу, чтобы программа закрывалась, если она не может читать из stdin, но я думаю, что в игру вступают некоторые проблемы с блокировкой с функцией readLine():
String stdinStr = "";
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
while(true){
try{
stdinStr = stdin.readLine();
}
catch(java.lang.Exception e){
System.exit(0);
}
//Do stuff with the stdinStr data
}
1 ответ
На это ответили в комментариях правдивость, но я хотел пометить это как ответивший.
readLine()
функция возвращает null
всякий раз, когда канал выходит, поэтому проверка этого позволяет вам правильно закрыть подпроцесс.