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

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

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

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

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

Ответы [ 2 ]

5 голосов
/ 12 января 2011

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

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

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

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

$ pgrep -U $UID sshd | xargs -rn1 pstree -hp
sshd(16305)───bash(16306)───screen(16670)
<b>sshd(16544)───bash(16545)───xargs(16705)───pstree(16707)</b>
$ kill 16305
$ screen -r
...