Process process = Runtime.getRuntime().exec("tasklist");
BufferedReader reader =
new BufferedReader(new InputStreamReader(process.getInputStream()));
process.waitFor();
Réponses
Trop de publicités?
Peter Lawrey
Points
229686
Il semble que vous ne lisez pas la sortie avant d'attendre qu'elle se termine. Ce n'est possible que si la sortie ne remplit pas le tampon. Si c'est le cas, il attendra que vous lisiez la sortie, catch-22.
Peut-être avez-vous des erreurs que vous ne lisez pas. Cela cas l'application pour arrêter et attendrePour attendre pour toujours. Une façon simple de contourner cela est de rediriger les erreurs vers la sortie régulière.
ProcessBuilder pb = new ProcessBuilder("tasklist");
pb.redirectErrorStream(true);
Process process = pb.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null)
System.out.println("tasklist: " + line);
process.waitFor();
EJP
Points
113412
Il y a plusieurs possibilités :
- Vous n'avez pas consommé tous les résultats du processus
stdout
. - Vous n'avez pas consommé tous les résultats du processus
stderr
. - Le processus est en attente d'une contribution de votre part et vous ne l'avez pas fourni, ou vous n'avez pas fermé le processus
stdin
. - Le processus tourne en boucle dure.