Так, програма, що працює над SSH, залежатиме від її результату, кудись піде. Якщо з'єднання повільне, вихід повинен бути десь буферним, а буфери не можуть бути нескінченними, тому програма повинна блокуватися, якщо вони заповнені.
Зауважте, що висновок може не обов’язково переходити до терміналу: розгляньте запуск чогось подібного
ssh user@somewhere "cat file.txt" > file.txt
Це фактично скопіює файл. Щоб це працювало, вихідний коефіцієнт кішки повинен відповідати рівню з'єднання: повинно бути очевидним, що втрачати частину виходу з середини було б неприпустимо.
Екран змінить ситуацію в тому, що він діє як термінал і збереже те, що має бути показано "у вікні терміналу" (плюс прокрутка). Не потрібно пам’ятати про все, що виводить ваша програма, лише ті частини, які підходять до «вікна» та прокрутки. За замовчуванням екран буде чекати повільного з'єднання (блокує програму), але його можна налаштувати на виявлення застрялого з'єднання, встановивши "неблокувати".
На чоловіковій сторінці:
розблокувати [on | off | numsecs]
Розкажіть екрану, як поводитися з користувацькими інтерфейсами (дисплеями), які перестають приймати вихід. Це може статися, якщо користувач натискає ^ S або з'єднання TCP / модем перерветься, але жодне з’єднання не отримано. Якщо вимкнено блокування (це за замовчуванням) екран очікує, поки дисплей перезапуститься, щоб прийняти вихід. Якщо розблокування увімкнено, екран чекає, поки не буде досягнуто тайм-аут (включене вважається 1s). Якщо дисплей все ще не отримує символів, екран вважатиме його "заблокованим" і перестане надсилати символи на нього. Якщо через деякий час він перезапустить для прийому символів, екран розблокує дисплей і повторно відобразить оновлений вміст вікна.
Відключення відрізняється від повільного з'єднання. Звичайний SSH не може відновитись з нього автоматично, тому ваша програма отримає SIGHUP. З іншого боку, екран виявить відключення, від'єднається та повернеться до локального буферизації, поки екран не буде встановлений повторно. Це буде не заблокує запущену програму.
(Налаштування nonblock 1
у вашому .screenrc
важливо, якщо ви запускаєте щось на зразок irssi, яке буде безперервно виробляти вихід, але все одно має спілкуватися з мережею одночасно. Блокування може призвести до відключення від IRC, що вкрай дратує ...)