Javaで外部プロセスを起動したときの落とし穴

Javaで外部プロセスを起動してwaitFor()で終了待機をすると動作が止まってしまう場合がある。原因は外部プロセスの出力が出力バッファに溜まった後にデッドロックしてしまうためだそうだ。これを防ぐにはwaitFor()を呼び出す前に、標準出力と標準エラー出力の内容を全て吐き出させなければならない。ネットで調べて見つけた手順は以下の通り。

  1. 外部プロセスを起動
  2. 標準出力と標準エラー出力を吐き出させる
    1. 念のため別スレッドで行ったほうが良いのかもしれない
  3. スレッド終了待機
  4. 外部プロセス終了待機

Java Puzzlers 罠、落とし穴、コーナーケース」という本に載っているそうなので、研究室で買ってもらえたら読んでみようと思う。

Java Puzzlers 罠、落とし穴、コーナーケース

Java Puzzlers 罠、落とし穴、コーナーケース