Закрытие 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 всякий раз, когда канал выходит, поэтому проверка этого позволяет вам правильно закрыть подпроцесс.

Другие вопросы по тегам