Глупый вопрос: я только что вышел из сеанса ssh с удаленной машины через строку cmd. Есть ли что-то, что убивало другие рабочие места или выключало машину? Все это произошло из-за зависания сетевого подключения и ssh-сессии. Мне просто нужно было нажать Ctrl + Z, и он заявил, что остановлены задания.

Удаленный компьютер: Ubuntu

Заранее спасибо!

1 ответ1

2

Что ж, если сетевые проблемы приводят к зависанию соединения, это означает, что пакеты данных не проходят. Это, конечно, означает, что клиентские пакеты "закрытого соединения" также не могут проходить.

Поэтому во время сетевых проблем сервер не знает, что вы убили клиента. Он выяснит это, только если попытается отправить больше данных и а) не получит подтверждение, или б) получит пакет сброса ("это соединение больше не существует").

В любом случае, как только он узнает, что SSH-соединение разорвано, sshd отправит сигнал "зависания" (SIGHUP) любой программе, запущенной на переднем плане (либо вашей оболочке, либо вашему текстовому редактору, либо как угодно). Затем оболочка отправит один и тот же SIGHUP на все ваши фоновые задания перед выходом. Поэтому ваши фоновые задания также завершатся. (Это причина того, что инструменты вроде nohup существуют, в конце концов.)

Если вы убьете ssh когда с сетью все в порядке, произойдет то же самое - сервер получит пакет "сброс соединения" и отправит "зависание" в оболочку.

Наконец, если вы выйдете из самой оболочки (используя exit или Ctrl D), она также сама пройдет через тот же процесс очистки, хотя на этот раз у нее есть шанс напомнить вам о запущенных заданиях.

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