所以我想从Java文件执行产生大量输出(以MB为单位的100S)一个shell脚本。 这挂过程并无法完成。
然而,在shell脚本中,如果我的脚本输出重定向到一些日志文件或/ dev / null的的Java文件执行,并在一个瞬间完成。
难道是因为该Java程序无法完成的数据量? 如果是这样,是否有任何文件这样? 或者是有关于数据量的任何限制(记录)?
这里是你如何可以模拟这个场景。
Java的文件将是这样的:
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) {
}
}
}
该脚本a-script-which-outputs-huuggee-data.sh“可能是这样的:
#!/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
免费啤酒正确的答案。 :)