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


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

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


Обходной путь не имел большого смысла для меня. Мой вывод 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

0

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


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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.