Режим копіювання екрана GNU блокує виконання?


11

Я використовую режим прокрутки / копіювання екрана GNU Screen. Тож я натискаю Control-A [, щоб увійти в режим копіювання, прокручуй до розділу, про який я дбаю ..., а потім забуду.

Однак, схоже, залишення екрана GNU у режимі прокрутки / копіювання блокує виконання (що б додаток не було на той час). Наприклад, якщо я запускаю локальний веб-сервер, якщо я перебуваю в режимі прокрутки / копіювання, запити, зроблені на цьому веб-сервері, вичерпаються: процес не відповідає, поки я не вийду з режиму копіювання / прокрутки.

Я бачив це як у сценарії / сервері Ruby On Rails, так і в інструменті "Вставити" Python.

Я розглядав можливість ввімкнення режиму ведення журналу для моїх вікон, а потім просто прокручування / перехоплення через ці журнали як альтернативу, але якщо це можна контролювати іншим способом (налаштування, активація режиму копіювання іншим способом), мені дуже цікаво.

Мій екран - перехід говорить:

Версія екрана 4.00.03 (FAU) 23-жовтня-06

(Я запитав це на quora.com, але, можливо, це краще місце)

Відповіді:


8

Причина того, що ваші процеси блокуються, полягає в тому, що екран перекриє вихідну трубу процесу, поки ви перебуваєте в режимі вставки для копіювання. Я не вважаю це справді помилкою, оскільки реально ви просите екран зберігати потенційно необмежену кількість інформації у своєму буфері під час копіювання / вставки. Якщо ви хочете, щоб вихід програми проходив повз, але також був спроможний призупиняти його раз у раз, спробуйте це.

program > logfile 2>&1 & 
less logfile

2> і 1 поєднають stderr і stdout з вашої програми. & Передає програму на задній план. Використовуйте fg, щоб вивести його на перший план, якщо вам потрібно. Тепер натисніть F, щоб стежити за закінченням файлу журналу, оскільки він зростає з меншою кількістю. Натисніть ctrl + c, якщо вам потрібно щось зупинити і вивчити, а потім F знову. Ви також можете натиснути &, щоб обмежити видимі рядки менш регулярним виразом. Дуже зручно, переглядаючи файли журналів.


"екран заблокує вихідну трубу процесу, поки ви перебуваєте в режимі копіювання вставки" - це може бути правдою, як тільки буде створено певний обсяг виводу, але в цьому випадку це, мабуть, не відповідає дійсності: while ((1)) ; do echo $i; i=$((i+1)); sleep 0.1; done- спробуйте викликати Копіювати режим і трохи почекайте. Коли ви виходите з режиму копіювання, значення i підскочило, показуючи, що виконання продовжується у фоновому режимі. Але я бачив вихід блоку екрана для деяких процесів, тому мені цікаво, що саме визначає, блокує екран чи ні.
davidA

"що саме визначає, блокує екран чи ні" - розмір буфера прокрутки визначає це. Ви можете збільшити його до необмеженого, але це займе пам'ять. Але не буде блокувати.
сан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.