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

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

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

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

$ screen -r
There 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.

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

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

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

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

83
задан 27 June 2017 в 08:22

6 ответов

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

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

$ screen

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

$ screen -S myprogramrunningunderscreen

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

$ screen -ls

There 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 сессия)

92
ответ дан 27 June 2017 в 08:22

Выходной сигнал screen -list отформатирован как pid.tty.host. Pids можно использовать для получения первого дочернего процесса с помощью 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)
...
0
ответ дан 27 June 2017 в 08:22

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

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

0
ответ дан 27 June 2017 в 08:22

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

screen -d -r

сработало для меня. Это оторвало предыдущий экран и позволило мне снова присоединиться. См. Man-страницу для получения дополнительной информации.

0
ответ дан 27 June 2017 в 08:22
screen -d -r 4964

или

screen -d -r 4874
<час>
$ screen -ls
There 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.
0
ответ дан 27 June 2017 в 08:22

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

screen -r

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

Просто мои два цента

0
ответ дан 27 June 2017 в 08:22

Другие вопросы по тегам:

Похожие вопросы: