Interstage Application Serverにおいて、java.lang.ProcessBuilderクラスを利用してプロセスを起動しても、子プロセスの実行が停止、または、ハングアップします。
- java.lang.ProcessBuilderクラスを利用して子プロセスを起動しても、子プロセスの実行が停止、または、ハングアップします。原因を教えてください。
- 親プロセスがjava.lang.ProcessBuilderクラスで子プロセスを実行する際、子プロセスの標準入力、標準出力、標準エラー出力のそれぞれに対してパイプを作成します。このため、子プロセスが、標準入力からの入力を待っている状態や、標準出力および標準エラー出力へ出力できない状態になった場合、子プロセス自身の処理が進まず、子プロセスがブロックされて、実行が停止、または、ハングアップする場合があります。子プロセスの標準入力への書込みおよび、標準出力、標準エラー出力からの読込みを行う処理を確実に迅速に行うようにしてください。
また、java.lang.ProcessBuilderクラスで起動した子プロセスと親プロセスのパイプのバッファは、以下のサイズになります。
Windows: 512 バイト
Solaris: 5,120 バイト
Linux: 4,096 バイト例えば、子プロセスから親プロセスへの通信量が、このバッファサイズを超えた場合は、バッファの読み込み待ちとなって処理が進みません。このような場合は、出力待ちとなっている通信バッファの内容を、親プロセス側で読み込むことで処理を進めることができます。
関連FAQ:
FAQ4023 「java.lang.Runtime#exec()メソッドで起動した子プロセスと親プロセス間のパイプのバッファサイズを教えてください。」
製品・サービス区分 | Interstage | ||||||
---|---|---|---|---|---|---|---|
製品・サービス情報 |
|
||||||
アンサー種別 | 設計/開発 |