Je crée un processus sous Windows à partir de Java. Mon problème est que ce processus ne se termine pas. Voici un exemple de programme:Le processus Windows exécuté à partir de Java ne se termine pas
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();
}
}
Pour des raisons indépendantes de notre compréhension, ce programme ne se termine jamais. Cela est vrai si "cmd/c dir" est remplacé par ipconfig ainsi que d'autres choses.
Je peux voir en utilisant ProcessExplorer que java crée le processus cmd. Cet échantillon est évidemment une simplification; Dans mon programme d'origine, j'ai trouvé que si j'appelle process.destroy() après un certain temps et que je vérifie la sortie du processus cmd, la commande est exécutée avec succès. J'ai essayé cela avec différentes versions de Java 1.5 et 1.6. Mon système d'exploitation est Windows XP Pro, SP 2.
+1 pour intercepter le problème de passage d'argument. –
Vous n'êtes pas entièrement correct. Les docs d'API pour exec (String) indiquent que l'argument est "une commande système", sans aucune définition plus proche de "commande système". Il n'est pas improbable que la JVM transmette simplement la chaîne à cmd.exe. – JesperE
Merci pour la réponse et le lien! Je devrais avoir la chance de le vérifier sur la machine problématique le dimanche. En fait, les arguments sont passés correctement; Je peux les voir dans Process Explorer. –