Javaのprocess.waitForがフリーズする問題をどのように解決できますか?
Javaにおいて、Process.waitFor()メソッドは、現在のスレッドをブロックし、子プロセスが完了するまで待機します。Process.waitFor()メソッドが動かない場合は、以下のいずれかの理由が原因である可能性があります。
- プロセスを待機させる。
- プロセスを破棄する。
process.destroy();
- 子プロセスの出力バッファが満杯になりました:子プロセスが多量の出力を持っており、適切に処理を行わなかった場合、子プロセスがブロックされる可能性があります。この問題を回避するためには、子プロセスを起動する前に適切なバッファサイズを設定することができます。
ProcessBuilder processBuilder = new ProcessBuilder(command);
processBuilder.redirectErrorStream(true);
processBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT);
Process process = processBuilder.start();
process.waitFor();
- プロセスの OutputStream を取得する
ProcessBuilder processBuilder = new ProcessBuilder(command);
processBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT);
Process process = processBuilder.start();
OutputStream outputStream = process.getOutputStream();
outputStream.write(input.getBytes());
outputStream.close();
process.waitFor();
適切な解決策を選択し、Process.waitFor()メソッドを呼び出す前に子プロセスの出力と入力を処理していることを確認してください。