У меня есть программа, работающая под экраном. Фактически, когда я отсоединяюсь от сеанса и проверяю 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, и ничего не происходит.
Существует два уровня "списков", включенных здесь. Во-первых, у Вас есть "список окон" в рамках отдельной сессии, которая является тем, какой 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
сессия)
Выходной сигнал 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)
...
Я склонен использовать следующую комбинацию, где мне нужно работать на нескольких машинах в нескольких кластерах:
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 -r
не удалось присоединить. Добавление флага -d
, чтобы он выглядел так,
screen -d -r
сработало для меня. Это оторвало предыдущий экран и позволило мне снова присоединиться. См. Man-страницу для получения дополнительной информации.
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.
Простой способ - просто повторно подключиться к произвольному экрану с помощью
screen -r
. После запуска экрана вы можете получить список всех активных экранов, нажав Ctrl-A "
(т.е. control-A сопровождаемый двойной цитатой). Затем вы можете просто выбрать активные экраны по одному и посмотреть, что они работают. Наименование экранов, конечно, облегчит выбор правильного.
Просто мои два цента