ホームページ > Java > &#&チュートリアル > JSch コマンド出力を読み取るときにデッドロックを回避するにはどうすればよいですか?

JSch コマンド出力を読み取るときにデッドロックを回避するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-02 06:26:29
オリジナル
987 人が閲覧しました

How to Avoid Deadlocks When Reading JSch Command Output?

JSch コマンド出力を継続的に読み取る方法

JSch 経由でコマンドを実行する場合、次のような原因によるデッドロックを防ぐために出力を継続的に読み取ることが重要です。出力バッファーがいっぱいです。これを実現する方法は次のとおりです。

<code class="java">ChannelExec channel = (ChannelExec)session.openChannel("exec");

channel.setCommand(...);

ByteArrayOutputStream outputBuffer = new ByteArrayOutputStream();
ByteArrayOutputStream errorBuffer = new ByteArrayOutputStream();

InputStream in = channel.getInputStream();
InputStream err = channel.getExtInputStream();

channel.connect();

while (!channel.isClosed()) {
    // Read stdout continuously
    while (in.available() > 0) {
        outputBuffer.write(in.read(tmp, 0, 1024));
    }

    // Read stderr continuously
    while (err.available() > 0) {
        errorBuffer.write(err.read(tmp, 0, 1024));
    }

    try {
        Thread.sleep(1000);
    } catch (Exception e) {}
}

System.out.println("output: " + outputBuffer.toString("UTF-8"));
System.out.println("error: " + errorBuffer.toString("UTF-8"));

channel.disconnect();</code>
ログイン後にコピー

出力を継続的に読み取ることで、コマンドの実行がブロックされず、必要に応じて出力を取得して処理できます。

以上がJSch コマンド出力を読み取るときにデッドロックを回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート