Javaで複数のプロセスを実行するのに問題があります。
ベクトルからプロセスを実行するループがありcmds
ます。現在、最初のプロセスを実行してから、2番目のプロセスがハングします。
ProcessBuilder proc = null;
for (String cmd:cmds){
proc = new ProcessBuilder(cmd.split("\\s"));
Process p = proc.start();
//Handle streams
//in
Scanner stdin = new Scanner(p.getInputStream());
while(stdin.hasNextLine()){
System.out.println(stdin.nextLine());
}
//err
Scanner stderr = new Scanner(p.getErrorStream());
while(stderr.hasNextLine()){
System.out.println(stderr.nextLine());
}
//wait
p.waitFor();
}
各プロセスのInputStreamとErrorStreamから読み取ったので、この答えは明らかに私には機能しません。私は何を誤解していますか?
どうすればこれを修正できますか?
注:このサンプルコードでは実際には役に立たないため、持っているtryブロックを削除しました
編集
proc = new ProcessBuilder(cur_string.split("\\s"));
proc. redirectErrorStream(true);
final Process p = proc.start();//Runtime.getRuntime().exec(cur_string);
//Handle streams
//in
new Thread(new Runnable(){
public void run(){
Scanner stdin = new Scanner(p.getInputStream());
while(stdin.hasNextLine()){
System.out.println(stdin.nextLine());
}
stdin.close();
}
}).start();
//wait
p.waitFor();