Не удается получить отдельный экран для возобновления

11

Я использую замазку и у меня ненадежное беспроводное соединение, поэтому я использую экран, чтобы моя работа продолжалась. Часто я отсоединяюсь, а потом не могу подключить свой экран. Я побегу, screen -D -RRи он будет сидеть там до бесконечности. Я попытался ctrl+zвернуть свою консоль, затем, ps aux | grep screenзатем, kill -9для всех результатов, и screen -D -RRснова, но я получаю те же результаты. Я пробую любую комбинацию d и r, которую вы хотите упомянуть, но все же она просто сидит там. Мой экран там, он просто ничего не сделает, меньше всего возобновит.

У кого-нибудь есть какие-либо советы или рекомендации, как возобновить сеанс моего экрана?

Дэйв Аарон Смит
источник

Ответы:

16

Я видел это, когда я сбрасываю соединение с активным экраном, а затем снова подключаюсь. Ошибка № 27462 («Перезапуск киосков, когда исходный сеанс потерян») описывает проблему, как я ее вижу. Похоже, происходит то, что экран пытается уведомить tty, который удерживает его, о том, что он собирается покинуть, но так как tty завис из-за разорванного соединения, он должен ждать, пока истечет время ожидания (которое превышает пять минут в некоторых случаях).

Чтобы это исправить, я делаю это:

  • выяснить, какой tty держится за сеанс экрана ps -ef | grep screen | grep pty
  • найти логин bash, связанный с этим tty ps -ef | grep bash | grep $PTY
  • убей этот удар kill -KILL $PID

Это приводит к тому, что экран завершает свое отключение правильно, и позволяет вам восстановить соединение в обычном режиме.

Смотрите здесь для примера сценарий, автоматизирующий это несколько.

Дэвид Макинтош
источник
ps -ef | экран grep | grep tty никогда ничего не печатает, потому что ps -ef | grep screen никогда не возвращает ничего со строкой tty.
Дэйв Аарон Смит
На самом деле пример сценария, кажется, делает свое дело. Благодарность!
Дэйв Аарон Смит
1
Да, я имел в виду «pty», а не «tty».
Дэвид Макинтош
2

У меня была похожая проблема с экранами. Я называю их и настраиваю как многопользовательские сеансы. То, что я обнаружил, было то, что это перечисляло мои сессии, но сообщая мне, что у меня не было никого, чтобы повторно соединиться. Тогда я попробовал:

screen -x <session_name>

Это сработало как чемпион!

Дуг Ноэль
источник
1

Я не могу сказать, что у меня когда-либо была проблема с тем, что экран не возвращается, независимо от того, на каком типе соединения я нахожусь. Мой обычный метод:

ssh myname@foo
screen -S sessionName
(do my work... get disconnected...)

ssh myname@foo
screen -d (just to make sure anything wasn't left attached)
screen -r sessionName
Джейсон Антман
источник
1
Например, screen -list возвращает 32322.mySession (Прикреплено). Затем я показываю сеанс. Затем screen -list по-прежнему возвращает 32322.mySession (Attached), а screen -r mySession возвращает. Нет экрана, который можно возобновить, соответствующего daveSession.
Дэйв Аарон Смит
ты пробовал просто "screen -d"?
Джейсон Антман
0

Возможно ли, что эта ошибка влияет на вас?

http://savannah.gnu.org/bugs/?27462

Можете ли вы попробовать сделать обходной путь, который они рекомендуют, и посмотреть, работает ли он?

Kyle-tummy.com
источник
Обходной путь не имел большого смысла для меня. Мой вывод ps -ef | grep screen совсем не похож на пример.
Дэйв Аарон Смит
0

Soulrce: https://kb.iu.edu/data/ahrm.html

To see your existing screen sessions, enter:
  screen -list
This will display a list of your current screen sessions. For instance, if you had one attached screen, you would see:

         1636.pts-21.hostname      (Attached)

To detach an attached screen, enter:
  screen -D
If you have more than one attached screen, you can specify a particular screen to detach. For example, to detach the screen in the above example, you would enter:
  screen -D 1636.pts-21.hostname
giorgio79
источник
0

Если вы такой же умный, как и я, вы пытались возобновить сеанс экрана, начатый как rootс учетной записью обычного пользователя. Обнаружил это, ls /var/run/screenпоказав мне каталог дляroot

uhFocuz
источник
0

У меня иногда возникает та же проблема (экран -r -d не возобновляется, не отвечает). Чтобы исправить, найдите терминал (tty / pty), связанный с сеансом экрана:

screen -list
There is a screen on:
    28176.pts-51.localhost        (Attached)
1 Socket in /tmp/uscreens/S-xxxx.

Найдите терминал в списке (в этом примере pts-51):

ps axuw | grep 'pts/51'   # will vary depending upon how pty's are named
you     12293  0.0  0.2  2148 1128 pts/51   Ss   10:34   0:00 -bash

Убейте процессы на этом терминале (обычно в вашей оболочке):

kill 12293

снова запустите ps, чтобы убедиться, что он исчез. Если не :

kill -9 12293

На моем сервере (gnu / linux) мне иногда приходится убивать -9 несколько раз, пока он не умрет.

После того, как все процессы на этом tty ушли, экран должен возобновиться правильно:

screen -r -d
TB303
источник
-1

Удалить мертвые экраны с screen -wipe.

Герчек Каракуш
источник
Я думаю, что это полная противоположность тому, что он пытается сделать.
Крис С