J'essaye donc d'exécuter un script shell qui produit beaucoup de sortie (en 100s de Mo) à partir d'un fichier Java. Cela bloque le processus et ne se termine jamais.L'appel d'un script shell à partir de Java se bloque
Cependant, dans le script shell, si je redirige la sortie du script vers un fichier journal ou/dev/null, le fichier Java s'exécute et se termine en un tournemain.
Est-ce à cause de la quantité de données que le programme Java n'achève jamais? Si oui, existe-t-il une documentation en tant que telle? ou y a-t-il une limite à la quantité de données (documentée)?
Voici comment simuler ce scénario.
fichierJava ressemblera:
import java.io.InputStream;
public class LotOfOutput {
public static void main(String[] args) {
String cmd = "sh a-script-which-outputs-huuggee-data.sh";
try {
ProcessBuilder pb = new ProcessBuilder("bash", "-c", cmd);
pb.redirectErrorStream(true);
Process shell = pb.start();
InputStream shellIn = shell.getInputStream();
int shellExitStatus = shell.waitFor();
System.out.println(shellExitStatus);
shellIn.close();
} catch (Exception ignoreMe) {
}
}
}
Le script 'a-script-which-outputs-huuggee-data.sh' peut ressembler à:
#!/bin/sh
# Toggle the line below
exec 3>&1 > /dev/null 2>&1
count=1
while [ $count -le 1000 ]
do
cat some-big-file
((count++))
done
echo
echo Yes I m done
bière gratuite pour le droit répondre. :)
Merci une tonne pour l'intérêt et la réponse !. Vous aviez raison, c'était le problème. – pavanlimo