Извлечение кода завершения процесса в случае ThreadInterrupted
Я только что создал процесс с помощью вызова exec(), и теперь я использую его метод.waitFor(). Мне нужно поймать InterruptedException, но я не уверен, что я должен поместить в блок кода перехвата. Я хотел бы получить код завершения, но не получу, если текущий поток будет прерван. Что я должен сделать, чтобы получить код выхода из процесса, если поток прерывается?
Пример:
import java.io.IOException;
public class Exectest {
public static void main(String args[]){
int exitval;
try {
Process p = Runtime.getRuntime().exec("ls -la ~/");
exitval = p.waitFor();
System.out.println(exitval);
} catch (IOException e) {
//Call failed, notify user.
} catch (InterruptedException e) {
//waitFor() didn't complete. I still want to get the exit val.
e.printStackTrace();
}
}
}
1 ответ
Решение
На вашем месте я бы поместил это в блок catch:
p.destroy();
exitval = p.exitValue();
Так как ваш поток был прерван, что-то пошло не так. destroy() принудительно завершит процесс, а затем exitValue() выдаст вам значение выхода (которое должно быть кодом ошибки, поскольку оно было прервано).
Подробнее http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Process.html