【发布时间】:2010-08-06 16:27:16
【问题描述】:
所以我正在尝试执行一个 shell 脚本,该脚本从 Java 文件中产生大量输出(以 100 MB 为单位)。 这会挂起进程并且永远不会完成。
但是,在 shell 脚本中,如果我将脚本的输出重定向到某个日志文件或 /dev/null Java 文件,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
答对的免费啤酒。 :)
【问题讨论】: