测试的脚本代码
#/bin/sh echo "step 1" i=0 while [ $i -lt 100 ] do expr 1 / 0 i=`expr $i + 1` done echo "step 2"
当错误信息比较少时,不处理错误流中的信息也没有问题
import java.io.*;
public class T {
public static void main(String[] args) throws Exception {
final Process p = Runtime.getRuntime().exec("/data/home/robinmei/t.sh");
p.waitFor();
p.exitValue();
}
}
但是当脚本中的错误信息比较多,例如将100改成10000,则很有可能引起阻塞,这里的版本也就是用一个线程去及时把错误流中的信息取走
最终可以顺利执行的代码
import java.io.*;
public class T {
public static void main(String[] args) throws Exception {
final Process p = Runtime.getRuntime().exec("/data/home/robinmei/t.sh");
Thread outThread = new Thread() {
public void run() {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
while ((line = br.readLine()) != null) {
System.out.println("out=[" + line + "]");
}
} catch (Exception e) {
}
}
};
outThread.start();
Thread errThread = new Thread() {
public void run() {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(p.getErrorStream()));
String line = null;
while ((line = br.readLine()) != null) {
System.out.println("err=[" + line + "]");
}
} catch (Exception e) {
}
}
};
errThread.start();
outThread.join();
errThread.join();
p.waitFor();
p.exitValue();
}
}