>  기사  >  Java  >  JSch 명령 출력을 읽을 때 교착 상태를 방지하는 방법은 무엇입니까?

JSch 명령 출력을 읽을 때 교착 상태를 방지하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-02 06:26:29863검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.