Каково поведение отмененного процесса над SSH, записывающего stdout, когда сеанс SSH теряется?

У меня есть приложение, которое обрабатывает HTTP-запросы и выводит определенную информацию о запросе, когда обрабатывает его на stdout . В этом сценарии я disown -h и disown процесс, disown на него. Он по-прежнему продолжает печатать на stdout , что ожидается. Кроме того, этот процесс запускается в сеансе SSH. Предположим, у меня есть слабый доступ в Интернет, и после выполнения всего вышеизложенного соединение прерывается, но SSH не знает, что это произошло. Естественно, это занимает несколько секунд, прежде чем SSH действительно осознает, что соединение прервано.

За это время приложение начинает испытывать таймауты при обработке запросов, пока сеанс SSH фактически не умрет. Это связано с проблемами буферизации, связанными с записью на stdout когда PTY больше не существует?

disown не позволит вашему приложению получать сигнал SIGHUP при выходе SSH. Однако, если приложение впоследствии записывает на pty, который был отозван, он получит сигнал SIGPIPE . Если вы не обрабатываете или игнорируете SIGPIPE , он по умолчанию убьет ваше приложение.

Если приложение обрабатывает SIGPIPE то его попытки записи возвращают статус ошибки, а затем до приложения, игнорирует ли она ошибку, прерывает или делает что-то еще. (Игнорирование ошибок редко бывает разумным.)

Если вам просто нужен самый простой способ предотвратить умирание вашего приложения и не хотите перенаправлять его в файл, подумайте о том, чтобы запустить его на screen или в tmux или использовать mosh вместо ssh .