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


82

У меня есть программа, работающая под экраном. Фактически, когда я отсоединяюсь от сеанса и проверяю 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, и ничего не происходит.


За быстрым способом выбора одного из списка нескольких открытых экранов screen -rследует номер 1, 2, 3 ... в этом списке экранов.
user18099

Ответы:


92

Здесь есть два уровня «списков». Во-первых, у вас есть «список окон» в рамках отдельного сеанса, для чего предназначен 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сессии)


Что Ctrl + Aa работает на вас? Я одновременно нажимаю control + a, а затем снова быстро нажимаю a, и ничего не происходит.
ДжонМерлино

Да; есть разница между ctrl-A aи ctrl-A shift-A. Последний побудил меня Set window's title to:. Убедитесь, что вы нажимаете клавишу shift для второго А.
Пол

Я делаю: «screen -r 21tweet» и получаю ответ: «Есть экран: 3239.21tweet (21.08.2015 09:14:35 AM) (Прилагается) Нет экрана, который можно возобновить в соответствии с 21weet». Что бы это могло быть?
Майкл

Весьма неочевидное предостережение о сеансах именования экранов заключается в том, что если вы называете их с помощью -Sимени, то при возобновлении вы должны использовать, по крайней мере, однозначную аббревиатуру имени, следующего за номером ID, и точку в полном имени сеанса экрана, в отличие от автоматически сгенерированные имена сеансов, где вы можете включить идентификатор и точку.
Спенсер Уильямс

1
Опечатка, исправлено. И этот сайт не позволит мне опубликовать такой короткий комментарий без дополнительного текста.
Пол

37

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

screen -d -r

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


12

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

screen -r

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

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


хорошо, как я называю мой экран?
Остин

@austin screen -S <sessionname>
Брайан,

4

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

screen -S clusterX

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

screen -dRR clusterX

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

Много благодарности https://support.dvsus.com/hc/en-us/articles/212925186-Linux-GNU-Screen-инструкции для этого совета некоторое время назад.

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

Также вот несколько полезных объяснений 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


2

Вывод 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)
...

1
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.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.