Heim  >  Artikel  >  Java  >  Wie vermeide ich Deadlocks beim Lesen der JSch-Befehlsausgabe?

Wie vermeide ich Deadlocks beim Lesen der JSch-Befehlsausgabe?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-02 06:26:29863Durchsuche

How to Avoid Deadlocks When Reading JSch Command Output?

So lesen Sie die JSch-Befehlsausgabe kontinuierlich

Wenn Sie einen Befehl über JSch ausführen, ist es wichtig, die Ausgabe kontinuierlich zu lesen, um daraus resultierende Deadlocks zu vermeiden ein voller Ausgabepuffer. So erreichen Sie dies:

<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>

Durch kontinuierliches Lesen der Ausgabe wird die Befehlsausführung nicht blockiert und die Ausgabe kann bei Bedarf abgerufen und verarbeitet werden.

Das obige ist der detaillierte Inhalt vonWie vermeide ich Deadlocks beim Lesen der JSch-Befehlsausgabe?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn