La lecture de flux de données à partir d'Exécution java.exec

J'ai l'extrait de code suivant:

Process proc = runtime.exec(command);
errorGobbler = new ErrorStreamGobbler(proc.getErrorStream(), logErrors, mdcMap);
outputGobbler = new OutputStreamGobbler(proc.getInputStream(), mdcMap);
executor.execute(errorGobbler);
executor.execute(outputGobbler);
processExitCode = proc.waitFor();

où la gobblers sont Runnables qui utilisent une BufferedReader pour lire l'entrée d'erreur et de flux de l'exécution de processus. Bien que cela fonctionne la plupart du temps, j'ai l'occasionnel fenêtre (environ 2 minutes) où je reçois le processExitCode que 0, ce qui indique normale d'expiration, mais il n'y a rien dans l'entrée d'erreur et de flux - rien à même d'indiquer en fin de flux.

Comme je l'ai indiqué avant, cela fonctionne la plupart du temps, mais cette panne se produit à chaque fois dans un certain temps - et je suis totalement perplexe. Des idées?

Chiffons

Un peu plus de contexte - c'est une application multi-thread, où beaucoup de l'Exécution.exec() se produisent simultanément. Chiffons
Tu veux dire que le flux de gobblers bloquer pour toujours?
Oui, ils le font! Ils ont juste accrocher...

OriginalL'auteur ragstorooks | 2010-07-27