GA将?開発日記~王理のその先へ~

ネタ勢最強を目指して絶賛開発中。

Javaのプロセス間通信ではまったんでメモ

 現象は、子プロセスが一定量の処理をした後に(常に同じ場所で)通信が止まるというもの。

 原因は子プロセスの標準出力だけを親プロセスが読んで、標準エラー出力を読んでいなかった事。

 こうすると、親プロセス内で標準エラー出力がバッファリングされているので、そのバッファがあふれて子プロセスの処理がブロッキングされる(標準エラー出力のバッファが空くのを待つ)けど、永遠にそのバッファは空かないので止まる、という事らしい。

 んで、解決方法は標準エラー出力に何も書かない事 OR 親プロセスの方で読み捨てる。とりあえず前者で解決しましたが、後者の方を実装しないと使い勝手が悪いケースもありそう。

 今の私の場合だと、親・子ともに自作のアプリなんで前者で問題無いですが、そうでなければ後者が必要かも。