Je rencontre un comportement étrange lors de l'appel d'un script shell à partir d'un processus Java.Appel de script depuis java, signal sigpipe reçu
Process p = Runtime.getRuntime().exec("mybashscript.sh");
(new StreamGobblerThread(p.getInputStream())).start();
(new StreamGobblerThread(p.getErrorStream())).start();
p.waitFor();
returnValue = p.exitValue();
Le StreamGobblerThread a juste une méthode run() qui fait un
while(((inputStream.available>0) { inputStream.skip(available); }
Environ 20% du temps, cela fonctionne, mais la plupart du temps le script échoue avec un code de retour de 141 tout de suite. D'après ce que j'ai trouvé sur google, 141 est un code de retour quand un SIGPIPE a été reçu.
Des idées?
peut-être vous devriez imprimer les erreurs, ils pourraient vous donner un sens message d'erreur –
'SIGPIPE' peut être provoqué par une sortie anticipée de' while' dans 'StreamGobblerThread'. Pour le vérifier, utilisez simplement 'run()' vide.Ajoutez une impression de débogage dans la boucle pour voir ce que 'available' est. Essayez de lire les données au lieu de sauter. – khachik
il semble qu'il n'y ait pas d''erreur' autre que le code de retour du script, car il ne s'agit pas d'une exception Java. tout java semble savoir, c'est que le code de sortie du script – Will