我正在使用ProcessBuilder
运行批处理文件的java程序。
public class Test {
public static void main(String[] args){
try {
ProcessBuilder processBuilder = new ProcessBuilder("pathToMyBatch.bat");
Process process = processBuilder.start();
StreamReader fluxSortie = new StreamReader(process.getInputStream());
StreamReader fluxErreur = new StreamReader(process.getErrorStream());
new Thread(fluxSortie).start();
new Thread(fluxErreur).start();
} catch (IOException e) {
e.printStackTrace();
}
}
static class StreamReader implements Runnable {
private final InputStream inputStream;
StreamReader(InputStream inputStream) {
this.inputStream = inputStream;
}
private BufferedReader getBufferedReader(InputStream is) {
return new BufferedReader(new InputStreamReader(is));
}
@Override
public void run() {
BufferedReader br = getBufferedReader(inputStream);
String ligne = "";
try {
while ((ligne = br.readLine()) != null) {
System.out.println(ligne);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
StreamReader
类是Runnable
,等待输入并打印每条读取线。
Thebatch文件只需调用java -classpath...
即可启动其他java应用程序,并执行与此应用程序相关(和无关)的其他内容。
我无法修改此批次。
说清楚:
程序A
启动启动应用程序B
C
当我直接从windows运行批处理文件B
时,java应用程序C
几乎不会占用超过2%的CPU。但是当我通过我的java程序A
运行它时,C
消耗了25%的CPU负载(1个完整核心)。
在这两种情况下,CPU上的批处理执行费用都是~0%。
我想这是由于java应用程序的输出和错误流未正确处理。
我是对的吗?我怎么能解决这个问题?有没有办法让子子(进程的子进程)进程流?