Prozess.exitValue() und Process.destroy () - Funktionen

Ich habe experimentiert mit Process und ProcessBuilder und kommen mit dieser SSCCE.

        import java.io.IOException;
        public class TestProcess {
            public static void main(String[] args) {
                Process process = null;
                ProcessBuilder pb = new ProcessBuilder("notepad.exe");

                try {
                    process = pb.start();
                } catch (IOException e) {e.printStackTrace();}

                //have some time to close notepad
                try {
                    Thread.sleep(10*1000);
                } catch (InterruptedException ignored) {}

                try {
                    System.out.println(process.exitValue());
                 } catch (IllegalThreadStateException e) {
                    System.out.println(e);
                 }

                 if (process != null)
                     process.destroy();

                 /*try {
                     Thread.sleep(0, 1);
                 } catch (InterruptedException ignored) {}*/

                 System.out.println(process.exitValue());
             }
         }
  1. Wenn ich diesen code ausführen, und schließen Sie Editor, bevor 10s timeout. destroy() nennen zeigt nicht jedes problem auf Anhieb zu stoppen, ist bereits beendet, Prozess. Warum?
  2. Wenn führen Sie diesen code und schließen Sie nicht den Editor überhaupt (mit kommentierten zweiten Schlaf)

Scheint es, dass zu zerstören, wird der asynchrone Aufruf (nur ein signal zu senden?) die Ergebnisse in Ausnahme im zweiten exitValue()

 java.lang.IllegalThreadStateException: process has not exited
 Exception in thread "main" java.lang.IllegalThreadStateException: process has not exited
        at java.lang.ProcessImpl.exitValue(ProcessImpl.java:246)
        at TestProcess.main(TestProcess.java:30)
  1. Wenn ich diesen code ausführen und schließen Sie nicht den Editor überhaupt (mit unkommentierte zweiten Schlaf) und dann den zweiten exitValue schmeißt Ausnahme, auch wenn der Schlaf Wert ist nur 1ms. Ist es, weil der sleep() Aufwand selbst?
    Zweite exitValue zurückkehren würde 1.

PS. Ich führen Sie es von Windows 7 und Eclipse.

  • 1) } catch (IOException ignored) {} Ziehen, Ihre Fehler aus dem sand und stattdessen } catch (IOException e) { e.printStackTrace(); } 2) stellen Sie Sicher, dass der code implementiert die Empfehlungen von "Wenn Laufzeit.exec() won 'T" 3) um genau Zu sein, ein SSCCE erfordert Importe.
  • 1) ich bin sicher, Sie können immer ausführen notepad bei Windows, 2) Was Sie tun bedeuten? 3) ja, nur ein import.
  • danke, ich habe den code aktualisieren, für 1) und 3).
Schreibe einen Kommentar