2016-04-18 7 views
0

ist MCVE:Warum endet meine Shell-Instanz nicht, wenn sie mit dem Batch-Skript abgeschlossen ist? Hier

/** 
    * Get your program totally stuck in three simple steps: 
    */ 
    public static void main(String[] args) throws Throwable { 
    /** 
    * 1. Create a simple batch file. 
    */ 
    String batch = "echo Hello world!"; 
    File file = new File("hello_world.bat"); 
    file.createNewFile(); 
    try (PrintWriter out = new PrintWriter(file)) { 
     out.print(batch); 
    } 
    /** 
    * 2. Execute that batch file 
    */ 
    ProcessBuilder pb = new ProcessBuilder("cmd", "/K "+file.getAbsolutePath()+">hello_world_log.txt"); 
    Process p = pb.start(); 
    /** 
    * 3. Wait for the file like an idiot forever 
    */ 
    p.waitFor(); 
    } 

Was ich erwarte, ist, dass der cmd.exe Prozess beendet werden soll, nachdem der letzte Befehl ausgeführt wird. Stattdessen hängt es herum und tut buchstäblich nichts.

Der Inhalt der Protokolldatei ist:

C:\...\testProject>echo Hello world! 
Hello world! 
+3

Verwenden '/ C' Option anstelle von'/K '. – saka1029

+2

Um dies zu erweitern: Die Option '/ K' fordert ausdrücklich an, dass' cmd.exe' weiter läuft. Es verhält sich genau wie dokumentiert. –

Antwort

0

Sie nicht den Ausgang des Teilprozesses lesen, vielleicht wartet es hängt für Sie stdin zu lesen?

Werfen Sie einen Blick auf redirecting output

+0

Ich wusste nicht, Prozesse können überprüfen, ob Sie ihre Ausgabe lesen oder nicht ... –

+0

Sie überprüfen nicht wirklich. Sie schreiben nur in den Ausgabestream und dieser Stream wird blockiert, wenn nichts davon liest. –

Verwandte Themen