У меня есть программа, работающая под экраном. На самом деле, когда я отсоединяюсь от сеанса и проверяю 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., чтобы дать ему имя. Это имя будет использоваться в списке окон и поможет вам запомнить, что вы делая это в каждом окне, когда вы начинаете использовать много окон ».
Дело в том, что когда я нахожусь на новом сеансе экрана, я пытаюсь нажать кнопку управления + a, и ничего не происходит.
У меня был случай, когда screen -r не удалось снова подключиться. Добавив флаг -d, чтобы он выглядел так:
screen -d -r
работал для меня. Он отделил предыдущий экран и позволил мне снова подключиться. Дополнительную информацию см. На странице Man.
Легкий способ просто подключиться к произвольному экрану с помощью
screen -r
Затем, как только вы запускаете экран, вы можете получить список всех активных экранов, нажав Ctrl-A " (т. е. A, за которым следует двойная кавычка). Затем вы можете просто выбрать активные экраны по одному и посмотреть, что они запускают. Именование экранов, конечно, облегчит определение правильного.
Только мои два цента
Я использую следующую комбо, где мне нужно работать на нескольких машинах в нескольких кластерах:
screen -S clusterX
Это создает новый сеанс экрана, где я могу создать среду.
screen -dRR clusterX
Это то, что я потом использую для повторного подключения к этому сеансу экрана. Отличные биты состоят в том, что если сеанс подключен в другом месте, он отделяет этот другой экран. Более того, если нет какой-либо сессии по какой-то причудливой причине, например, кто-то перезагрузил мой сервер, не зная меня, он создает его. В заключение. если существует несколько сеансов, он использует первый.
Много kudos https://support.dvsus.com/hc/en-us/articles/212925186-Linux-GNU-Screen-instructions для этого немного назад.
Выход 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)
...