Закрытие Java-подпроцесса, когда вызывающая программа завершает работу / вылетает - PullRequest
0 голосов
/ 27 марта 2012

Я собираю многоязычную систему, но сталкиваюсь с проблемами с потерянными процессами.

Мой код состоит из Python-программы, вызывающей Java-программу, с канальной связью между двумя программами;Java-программа является постоянной, а не разовой.В целом все работает, но мне нужно закрыть программу на Java, если программа Python преждевременно завершает работу.

I думаю, лучший способ сделать это - закрыть программу Java, если онане могу обнаружить канал stdin между программами, но я не могу понять, как это сделать.

Соответствующий код Python:

javaInterface = subprocess.Popen(["pathtojavaprogram"], stdin=subprocess.PIPE, stdout=subprocess.PIPE)

Соответствующий код Java;Я хочу, чтобы программа закрывалась, если она не может читать из стандартного ввода, но я думаю, что в игру вступают некоторые проблемы с блокировкой с функцией 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 Ответ

0 голосов
/ 13 июня 2012

На это ответили в комментариях trutheality, но я хотел отметить это как ответ.

Функция readLine() возвращает null при выходе из канала, поэтому проверка этого позволяет правильно закрыть подпроцесс.

...