Как я могу сохранить экран gnu, чтобы он не отвечал на запросы после потери соединения SSH?

Я использую VPN-туннель для подключения к своей рабочей сети, а затем SSH для подключения к своему рабочему ПК с запущенным Cygwin. После входа в систему я могу присоединиться к сеансу экрана, и все отлично работает.

Теперь, через некоторое время, я ухожу от своего компьютера, и рано или поздно VPN-туннель отключается. Соединение SSH на каждом конце в конечном счете истекает, и затем я в конечном счете возвращаюсь к своему компьютеру, чтобы сделать некоторую работу. Теоретически, это должен быть простой вопрос: просто перезапустить VPN, переподключиться через SSH, а затем запустить "screen -r -d".

Однако, по-видимому, когда демон sshd отключается на компьютере cygwin, он оставляет сеанс экрана в каком-то состоянии зависания. Я могу воспроизвести подобное состояние зависания, щелкнув поле закрытия в окне оболочки Cygwin Bash во время сеанса экрана.

Есть ли способ восстановить сеанс экрана после того, как это произошло, чтобы я ничего не потерял?

2 ответа

Решение

После долгих экспериментов я смог восстановить экранную сессию следующим образом:

  1. Поиск PID процесса экрана сервера: ps | экран grep
  2. Отправьте серверу сигнал HUP: kill -1
  3. Запустите экранный клиент: screen -r -d

screen блокирует на (мертвой) сессии SSH pty. Восстановить, убив это sshd,

Предполагая Linux, и что вы в данный момент не находитесь внутри экрана:

$ pgrep -U $ UID sshd | xargs -rn1 pstree -hp
SSHD (16305)───bash(16306)───screen(16670)SSHD (16544) ───bash (16545) ───xargs (16705) ───pstree (16707)$ kill 16305
$ screen -r
Другие вопросы по тегам