ホームページ  >  記事  >  Java  >  JSch コマンド出力を読み取るときにデッドロックを回避するにはどうすればよいですか?

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-02 06:26:29858ブラウズ

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。