ホームページ >Java >&#&チュートリアル >JSch コマンドのハングアップ: 大きな出力を読み取るときにデッドロックを回避するには?
JSch コマンド出力のハングアップ: ケーススタディ
JSch 経由でコマンドを実行すると、コードがハングしているように見える状況が発生する場合があります。 ChannelExec の入力ストリームから読み取ろうとしているとき。これを解決するには、コマンドのステータスを監視しながら、出力から継続的に読み取りを行うことが重要です。
次のコード スニペットを検討してください。
<code class="java">while ((numRead = reader.read(buf)) != -1) { // ... }</code>
コマンドが大量の出力を生成する場合、出力バッファーがいっぱいになり、バッファーが消費されるのを待っている間にコマンドが停止する可能性があります。これにより、デッドロック シナリオが発生する可能性があります。
この問題に対処するには、標準出力と標準エラーの両方を継続的に読み取り、コマンドのステータスを監視する必要があります。これにより、出力バッファが空のままになり、コマンドが中断されることなく完了できるようになります。
<code class="java">while (true) { // Read from standard output while (in.available() > 0) { // Replace reader with in and err for error handling // ... } // Read from standard error while (err.available() > 0) { // Replace reader with in and err for error handling // ... } if (channel.isClosed()) { // ... } try { Thread.sleep(1000); } catch (Exception ee) { } }</code>
出力ストリームとエラー ストリームから継続的に読み取り、チャネル ステータスを定期的にチェックすることで、ハングアップを防止し、コマンドは正常に完了します。
以上がJSch コマンドのハングアップ: 大きな出力を読み取るときにデッドロックを回避するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。