У меня есть программа, запущенная под экраном. На самом деле, когда я отключаюсь от сеанса и проверяю 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
Затем, как только вы запустите screen, вы можете получить список всех активных экранов, нажав Ctrl-A " (т.е. control-A, за которым следует двойная кавычка). Затем вы можете просто выбирать активные экраны по одному и смотреть, что они запускают. Присвоение экранам имен, конечно, облегчит поиск нужного экрана.
Я обычно использую следующую комбинацию, когда мне нужно работать на нескольких машинах в нескольких кластерах:
screen -S clusterX
Это создает новый сеанс экрана, в котором я могу создать среду.
screen -dRR clusterX
Это то, что я использую впоследствии для повторного подключения к этому сеансу экрана. Изящные биты заключаются в том, что если сеанс подключен в другом месте, он отсоединяет этот другой дисплей. Более того, если по какой-то причудливой причине сеанс отсутствует, например, кто-то перезагрузил мой сервер без моего ведома, он создает его. Окончательно. если существует несколько сеансов, он использует первый из них.
Также вот несколько полезных объяснений от 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 -r”, за которым следует ** номер 1, 2, 3 … ** в этом списке экранов.