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