Извлечение кода завершения процесса в случае ThreadInterrupted


Я только что создал процесс с помощью вызова exec() и теперь использую его.метод waitFor (). Мне нужно поймать InterruptedException, но я не уверен, что я должен поместить в блок кода catch. Я хотел бы получить код выхода, но я не буду, если текущий поток прерывается. Что я должен сделать, чтобы получить код выхода из процесса если нить прервется?

Пример:

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 2

1 ответ:

Если бы я был на вашем месте, я бы поместил это в блок catch:

p.destroy();
exitval = p.exitValue();

Поскольку ваш поток был прерван, что-то пошло не так. destroy() принудительно завершит процесс, а затем exitValue() даст вам значение exit (которое должно быть кодом ошибки, так как оно было прекращено).

Еще http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Process.html