Как я могу сохранить экран gnu, чтобы он не отвечал на запросы после потери соединения SSH?
Я использую VPN-туннель для подключения к своей рабочей сети, а затем SSH для подключения к своему рабочему ПК с запущенным Cygwin. После входа в систему я могу присоединиться к сеансу экрана, и все отлично работает.
Теперь, через некоторое время, я ухожу от своего компьютера, и рано или поздно VPN-туннель отключается. Соединение SSH на каждом конце в конечном счете истекает, и затем я в конечном счете возвращаюсь к своему компьютеру, чтобы сделать некоторую работу. Теоретически, это должен быть простой вопрос: просто перезапустить VPN, переподключиться через SSH, а затем запустить "screen -r -d".
Однако, по-видимому, когда демон sshd отключается на компьютере cygwin, он оставляет сеанс экрана в каком-то состоянии зависания. Я могу воспроизвести подобное состояние зависания, щелкнув поле закрытия в окне оболочки Cygwin Bash во время сеанса экрана.
Есть ли способ восстановить сеанс экрана после того, как это произошло, чтобы я ничего не потерял?
2 ответа
После долгих экспериментов я смог восстановить экранную сессию следующим образом:
- Поиск PID процесса экрана сервера: ps | экран grep
- Отправьте серверу сигнал HUP: kill -1
- Запустите экранный клиент: 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