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

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

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

One Solution collect form web for “Каково поведение отмененного процесса над SSH, записывающего stdout, когда сеанс SSH теряется?”

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

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

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

  • Как перенаправить stdout в файл и прочитать из того же файла одновременно с другой задачей?
  • Командная строка 'buffer'
  • неожиданный вывод с помощью grep
  • Неудачное решение от «Как перенаправить stdout и stderr в файл и отобразить stderr для консоли»
  • Как просмотреть вывод запущенной программы поверх ssh
  • IO и другие команды оболочки, когда программа не запускается терминалом
  • Захват stdout из сеанса ssh на локальную машину
  • uniq и bash для цикла, не записывающего в stdout перед закрытием stdin (для системы уведомлений посетителей в одной строке)
  • журнал регистрации ufsdump при резервном копировании на stdout
  • Вращение файлов журналов во время работы
  • Превращение стандартного вывода в одну команду
  • Linux и Unix - лучшая ОС в мире.