> Java > java지도 시간 > 본문

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

Mary-Kate Olsen
풀어 주다: 2024-10-28 12:42:02
원래의
151명이 탐색했습니다.

  JSch Command Hang-Up:  How to Avoid Deadlock When Reading Large Output?

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!