10

Всякий раз, когда у меня есть фоновое соединение X11 в сеансе SSH, я должен использовать ~. и не exit для выхода из сеанса SSH.

Какая здесь разница? Могу ли я всегда использовать escape-последовательность ~. ?

2 ответа2

5

exit говорит вашей текущей оболочке выйти. Поскольку (когда нет туннельного соединения, например, X11, активно), это означает, что процесс, вызванный sshd на стороне сервера, завершился, SSH затем отключается.

~. это "магическая" escape-последовательность, которую SSH захватывает и немедленно отключает (включая туннель X11).

Так что нет, они не взаимозаменяемы. Если вы хотите, чтобы ваша удаленная оболочка (или какая-либо программа, запущенная удаленно) корректно завершилась, вы должны соответствующим образом завершить ее.

4

Это хорошо описано уже в другом ответе, но я бы добавил немного предыстории:

Сегодня одно SSH-соединение может содержать несколько сеансов (ваши оболочки, команды), каналы пересылки TCP и каналы пересылки X11 . И тут возникает разница:

  • Запись exit (или Ctrl+D) разрушает сеансовый канал, но если есть активные некоторые каналы X11 (например, gvim оставляет несколько подключений к X-серверу, обрабатывающему буфер обмена и заголовок, который не закрывается при exit). При написании команды exit приложение X11 будет работать, а ваш терминал будет зависать до тех пор, пока он не будет закрыт.

  • Написание ~. рушит всю связь. Вы можете заметить, если вы запускаете какое-то приложение X11, оно также закрывается, когда вы пишете ~. ,

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .