ハングしている ksh スクリプトを呼び出す Java アプリがあります。バックエンドを見ると、スクリプトの書き込みプロセスSTDOUT
がいっぱいでブロックされていることがわかります。STDERR
空であるはずで、私のJavaコードは最初にそれを読んでいます。デバッグすると、Java アプリが入力ストリームの読み取りでハングSTDERR
し、STDOUT にさらに書き込みを試みるスクリプト プロセスがブロックされることが示されます。私STDERR
は秒(後STDOUT
)に書き込まれていると思うので、入力が表示されるまで待機します(書き込みがオンになっているため、入力を受け取ることができませんSTDOUT
)。
このアプリは、1 つを除いて、複数の Linux ボックス (すべて同一の OS とカーネル) で正常に動作します。各入力ストリームの読み取りを別々のスレッドに配置すると、この 1 つのボックスの問題が解決されます。STDERR
Linux のデフォルトは非バッファリングであり、その入力は通常すぐに書き込まれることを知っています。したがってSTDERR
、このボックスでバッファリングに設定されている可能性があると考えています。その価値をどのように/どこで見つけることができますか?