Повторное подключение к существующему сеансу экрана

У меня есть программа, запущенная под экраном. На самом деле, когда я отключаюсь от сеанса и проверяю netstat, я вижу, что программа все еще запущена (чего я и хочу).:

udp        0      0 127.0.0.1:1720          0.0.0.0:*                           3759/ruby       

Теперь я хочу снова подключиться к сеансу, в котором выполняется этот процесс. Поэтому я запускаю новый терминал и набираю screen -r

$ screen -rThere are several suitable screens on:    5169.pts-2.teamviggy    (05/31/2013 09:30:28 PM)    (Detached)    4872.pts-2.teamviggy    (05/31/2013 09:25:30 PM)    (Detached)    4572.pts-2.teamviggy    (05/31/2013 09:07:17 PM)    (Detached)    4073.pts-2.teamviggy    (05/31/2013 08:50:54 PM)    (Detached)    3600.pts-2.teamviggy    (05/31/2013 08:40:14 PM)    (Detached)Type "screen [-d] -r [pid.]tty.host" to resume one of them.

Но как мне узнать, какой из них является сеансом, запускающим тот процесс, который я создал?

Так вот, в одном из документов, с которыми я столкнулся, говорилось:

"Когда вы используете окно, введите C-a A, чтобы дать ему имя. Это имя будет использоваться в списке окон и поможет вам запомнить, что вы делаете в каждом окне, когда начнете использовать много окон."

Дело в том, что когда я нахожусь в новом сеансе экрана, я пытаюсь нажать control + a A, и ничего не происходит.

Здесь задействованы два уровня "списков". Во-первых, у вас есть "список окон" в рамках отдельного сеанса, для чего и предназначен ctrl-A, а во-вторых, есть "список сеансов", который вы вставили в свой вопрос и который также можно просмотреть с помощью screen -ls.

Вы можете настроить имена сеансов с помощью -S параметр, в противном случае он использует ваше имя хоста (teamviggy), например:

$ screen

(ctrl-A d для отсоединения)

$ screen -S myprogramrunningunderscreen

(ctrl-A d для отсоединения)

$ screen -lsThere are screens on:    4964.myprogramrunningunderscreen    (05/31/2013 09:42:29 PM)    (Detached)    4874.pts-1.creeper  (05/31/2013 09:39:12 PM)    (Detached)2 Sockets in /var/run/screen/S-paul.

В качестве бонуса вы можете использовать однозначную аббревиатуру имени, которое вы передаете в -S позже для повторного подключения:

screen -r myprog

(Я снова подключен к myprogramrunningunderscreen сессия)

У меня был случай, когда screen -r не удалось снова прикрепить. Добавление -d флаг, чтобы это выглядело так

screen -d -r

сработало для меня. Он отсоединил предыдущий экран и позволил мне снова подключиться. Дополнительные сведения см. на Справочной странице.

Простой способ - просто повторно подключиться к произвольному экрану с помощью

screen -r

Затем, как только вы запустите screen, вы можете получить список всех активных экранов, нажав Ctrl-A " (т.е. control-A, за которым следует двойная кавычка). Затем вы можете просто выбирать активные экраны по одному и смотреть, что они запускают. Присвоение экранам имен, конечно, облегчит поиск нужного экрана.

Только мои два цента

Я обычно использую следующую комбинацию, когда мне нужно работать на нескольких машинах в нескольких кластерах:

screen -S clusterX

Это создает новый сеанс экрана, в котором я могу создать среду.

screen -dRR clusterX

Это то, что я использую впоследствии для повторного подключения к этому сеансу экрана. Изящные биты заключаются в том, что если сеанс подключен в другом месте, он отсоединяет этот другой дисплей. Более того, если по какой-то причудливой причине сеанс отсутствует, например, кто-то перезагрузил мой сервер без моего ведома, он создает его. Окончательно. если существует несколько сеансов, он использует первый из них.

Большая честь для https://support.dvsus.com/hc/en-us/articles/212925186-Linux-GNU-Screen-instructions за этот совет некоторое время назад.

РЕДАКТИРОВАТЬ:

Также вот несколько полезных объяснений от man screen о загадочных параметрах

       -d -r   Reattach a session and if necessary detach it first.       -d -R   Reattach a session and if necessary detach or  even  create  it               first.       -d -RR  Reattach  a  session  and if necessary detach or create it. Use               the first session if more than one session is available.       -D -r   Reattach a session. If necessary  detach  and  logout  remotely               first.

есть еще кое-что с -D поэтому обязательно проверьте man screen

Выход из screen -list форматируется как pid.tty.host. Идентификаторы pid можно использовать для получения первого дочернего процесса с pstree:

screen -list|cut -f1 -d'.'|cut -f2|xargs -n 1 pstree -p|grep "^screen"

Вы получите список, подобный этому

screen(5169)---zsh(5170)---less(15268)screen(4872)---zsh(4873)-+-cat(11364)...
screen -d -r 4964

или

screen -d -r 4874

$ screen -lsThere are screens on:4964.myprogramrunningunderscreen    (05/31/2013 09:42:29 PM)    (Detached)4874.pts-1.creeper  (05/31/2013 09:39:12 PM)    (Detached)2 Sockets in /var/run/screen/S-paul.

Быстрый способ выбрать один из * списка* нескольких открытых экранов - это “screen -r”, за которым следует ** номер 1, 2, 3 … ** в этом списке экранов.