Ich erstelle einen Prozess unter Windows von Java. Mein Problem ist, dass dieser Prozess nicht beendet wird. Hier ist ein Beispielprogramm:Windows-Prozess ausgeführt von Java nicht beendet
import java.io.IOException;
public class Test {
/**
* @param args
* @throws IOException
* @throws InterruptedException
*/
public static void main(String[] args) throws IOException,
InterruptedException {
Process process = Runtime.getRuntime().exec("cmd /c dir");
process.waitFor();
}
}
Aus Gründen, die mein Verständnis übersteigt, wird dieses Programm nie abgeschlossen. Dies ist der Fall, wenn "cmd/c dir" durch ipconfig und andere Dinge ersetzt wird.
Ich kann mit ProcessExplorer sehen, dass Java den CMD-Prozess erstellt. Diese Probe ist offensichtlich eine Vereinfachung; In meinem ursprünglichen Programm habe ich festgestellt, dass der Befehl erfolgreich ausgeführt wird, wenn ich nach einer Weile process.destroy() aufruft und die Ausgabe des CMD-Prozesses überprüfe.
Ich habe dies mit verschiedenen Versionen von Java 1.5 und 1.6 versucht. Mein Betriebssystem ist Windows XP Pro, SP 2.
+1 für das Abfangen des Problems der Argumentübergabe. –
Sie sind nicht ganz richtig. Die API-Dokumentation für exec (String) gibt an, dass das Argument "ein Systembefehl" ist, ohne eine nähere Definition von "Systembefehl". Es ist nicht unwahrscheinlich, dass die JVM die Zeichenfolge einfach an cmd.exe übergibt. – JesperE
Danke für die Antwort und den Link! Ich sollte die Gelegenheit haben, es am Sonntag auf der problematischen Maschine zu überprüfen. Tatsächlich werden die Argumente korrekt übergeben; Ich kann sie im Prozess-Explorer sehen. –