116 votes

process.waitFor() ne renvoie jamais

Process process = Runtime.getRuntime().exec("tasklist");
BufferedReader reader = 
    new BufferedReader(new InputStreamReader(process.getInputStream()));
process.waitFor();

98voto

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();

10voto

EJP Points 113412

Il y a plusieurs possibilités :

  1. Vous n'avez pas consommé tous les résultats du processus stdout.
  2. Vous n'avez pas consommé tous les résultats du processus stderr.
  3. 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.
  4. Le processus tourne en boucle dure.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X