SSH 세션이 손실되면 SSH를 통해 표준 출력에 기록하는 거부 프로세스의 동작은 무엇입니까?

SSH 세션이 손실되면 SSH를 통해 표준 출력에 기록하는 거부 프로세스의 동작은 무엇입니까?

HTTP 요청을 처리하는 애플리케이션이 있는데, 이 애플리케이션이 요청을 처리할 때 요청에 대한 일부 정보를 stdout. 이 경우에는 백그라운드에서 실행한 후 해당 프로세스에서 disown -hand를 실행했습니다 disown. 여전히 stdout예상되는 인쇄가 계속됩니다 . 또한 이 프로세스는 SSH 세션 내에서 시작됩니다. 인터넷 접속이 불안정하고 위의 모든 작업을 수행한 후 연결이 끊어지고 SSH가 이런 일이 발생했다는 것을 알지 못한다고 가정해 보겠습니다. 물론 SSH가 실제로 연결이 끊어졌음을 깨닫는 데는 몇 분이 걸립니다.

이 시간 동안 SSH 세션이 실제로 종료될 때까지 요청을 처리하는 동안 애플리케이션에서 시간 초과가 발생하기 시작합니다. 이는 stdoutPTY가 더 이상 존재하지 않을 때 쓰기와 관련된 버퍼링 문제 때문입니까 ?

답변1

disownSIGHUPSSH가 종료되면 애플리케이션이 신호를 수신할 수 없습니다. 그러나 애플리케이션이 이후에 해지된 PTY에 쓰면 신호를 받게 됩니다 SIGPIPE. 처리하거나 무시하지 않는 한 SIGPIPE기본적으로 애플리케이션이 종료됩니다 .

애플리케이션이 처리하는 경우 SIGPIPE쓰기 시도는 오류 상태를 반환하며 오류를 무시할지, 중단할지, 아니면 다른 조치를 취할지 결정하는 것은 애플리케이션에 달려 있습니다. (오류를 무시하는 것이 현명한 경우는 거의 없습니다.)

앱이 죽는 것을 방지하는 가장 쉬운 방법을 원하고 파일로 리디렉션하고 싶지 않은 경우 내 에서 screen실행 tmux하거나 .moshssh

관련 정보