Intereting Posts
Поддерживает ли поддержка дистрибутива Linux настройку чувствительности колесика мыши? Какую файловую систему использовать для раздела, совместно используемого при параллельной установке Windows? Выполнить .exe на долю samba как написать `fuser -k -n tcp 80` в скрипт bash? фон tmux vim colorscheme не показывает удалить из n-го вхождения в конец файла Запуск одной команды за другой в zsh при нажатии Ctrl-C pfctl – Как переслать ip-адрес в Mac OS Yosemite Один файл хочет принадлежать двум пользователям. Как? Жесткая привязка не работает Установите определенную версию пакета наложения портов Не удалось установить символическую ссылку на файл Почему при запуске sudo cp отображаются два процесса удаленный процесс, запущенный через ssh, убивается, если пользовательский интерфейс закрыт Manjaro Linux с LispWorks Попытка сделать арифметику в инструменте переименования Perl (Debian)

Каково поведение отмененного процесса над 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 .