Повторне приєднання до існуючого екранного сеансу


81

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

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

Тепер я хочу повторно приєднатись до сеансу, що виконує цей процес. Тому я запускаю новий термінал і набираю екран -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дотримується цифри 1, 2, 3 ... у цьому списку екранів.
user18099

Відповіді:


91

Тут задіяні два рівні "списків". По-перше, у вас є "список вікон" в рамках окремого сеансу, для чого призначений 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, а потім швидко знову натискаю, і нічого не відбувається.
ДжонМерліно

Так; є різниця між ctrl-A aі ctrl-A shift-A. Останнє спонукало мене до Set window's title to:. Переконайтеся, що ви натискаєте на зміну другого А.
Пол,

Я роблю: "screen -r 21tweet" і отримую відповідь: "Є екран у: 3239.21tweet (21.08.2015 09:14:35) (додається) Немає екрана, який слід відновити відповідно до 21tweet." Що це може бути?
Майкл

Дуже не очевидний застереження щодо іменування сеансів на екрані - це те, що якщо ви даєте їм ім’я -S, вам потрібно використовувати принаймні однозначну абревіатуру імені за ідентифікаційним номером і крапкою у повному імені сеансу екрана під час відновлення, на відміну від автоматично згенеровані імена сеансу, куди можна включити ідентифікатор та крапку.
Спенсер Вільямс

1
Друкарська помилка, виправлена. І цей сайт не дозволить мені опублікувати такий короткий коментар без додаткового тексту.
Павло

37

У мене був випадок, коли screen -rне вдалося повторно приєднатися. Додайте -dпрапор, щоб він виглядав так

screen -d -r

працював на мене. Це відокремило попередній екран і дозволило мені повторно вкласти. Для отримання додаткової інформації див сторінку Сторінка людини.


12

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

screen -r

Потім, коли ви працюєте на екрані, ви можете отримати список всіх активних екранів, натиснувши Ctrl-A "(тобто контроль-A, а потім подвійну лапочку). Потім ви можете просто вибрати активні екрани один за одним і подивитися, що вони працюють. Ім'я екранів, звичайно, полегшить визначення правильного.

Всього два мої центи


добре, як я називаю екран?
austin

Екран @austin -S <назва імені>
Брайан

4

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

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


2

Вихід у screen -listформатується як pid.tty.host. Під можна використовувати для отримання першого дочірнього процесу за допомогою 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.