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