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 Runnable
s 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...
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
Vous devez vous connecter pour publier un commentaire.
J'ai lutté avec le même genre de questions.
Je ne me souviens pas exactement ce qui était mauvais (peut-être que j'ai oublié de vider /fermeture du flux correctement ou quelque chose ...).
De toute façon, ici, c'est que je suis venu avec.
J'espère que cette aide.
OriginalL'auteur Raphael Jolivet