Runtime.exec()
を使用してjavaでサブプロセスを作成する場合、サブプロセスのブロックを防ぐために入出力ストリームを埋める必要があることを認識しています。Java、サブプロセス、未読出力ストリーム:デッドロックはいつですか?
興味深いことに、Process
状態のjavadocをもう少し:
...failure to promptly write the input stream or read the output stream of
the subprocess may cause the subprocess to block, and even deadlock.
私はこのような状況では、サブプロセスがもをデッドロックすることができますことを疑問に思って!
質問:
1.デッドロックする条件はありますか?
2.なぜデッドロックですか?
3.このデッドロックを示す短いサンプルプログラムを提供できますか?
4.このデッドロックはOSのバグですか?
+1 ...(あなたの質問に対する答えではないのでコメント)* ...長い時間前(私が*「Runtime.execが* IIRCではない」と読んだとき) Runtime.exec'edシェルスクリプトを直ちにフォーク/終了させ、第2のシェルスクリプトからの出力を一時ファイルにリダイレクトする(そして、これらの一時ファイルをJavaから解析する)ことによって、この問題を完全に回避することができます。残念だけど、うまくいきます(LinuxとOS Xの両方でやったことがあります... Windowsについて知らないでください): – TacticalCoder