Что произойдет, если я не закрою сеанс ssh?

Я новичок в Python. В настоящее время я использую его для подключения к удаленным серверам через ssh, делаю некоторые вещи (включая копирование файлов), а затем закрываю сеанс.

После каждого сеанса я делаю ssh.close() и sftp.close(). Я делаю это просто потому, что это типичный способ, который я нашел в Интернете.

Мне интересно, что произойдет, если я просто закончу свой сценарий, не закрывая сеанс. Не повлияет ли это на сервер? Будет ли это создавать некоторую (или даже очень небольшую) нагрузку на сервер? Я имею в виду, почему мы делаем это в первую очередь?


person KhaledMaged    schedule 18.05.2016    source источник


Ответы (2)


(Локальная) операционная система закрывает любое незавершенное соединение TCP/IP, открытое процессом, когда процесс закрывается (даже если он просто аварийно завершает работу).

Так что в итоге сеанс SSH закрывается, даже если вы его не закрываете. Очевидно, он закрылся внезапно, без надлежащей очистки SSH. Таким образом, это может вызвать некоторое предупреждение в журнале сервера.

Закрытие сеанса особенно важно, когда процесс выполняется долго, а сам сеанс используется недолго.

В любом случае, рекомендуется закрыть сеанс, несмотря ни на что.

person Martin Prikryl    schedule 18.05.2016

Мы закрываем сеанс после использования, чтобы очистка (закрытие всех запущенных процессов, связанных с ним) выполнялась правильно/легко.

Когда вы ssh.close() генерируете сигнал SIGHUP. Этот сигнал убивает все задачи/процессы под терминалом автоматически/мгновенно.

Когда вы внезапно завершаете сеанс без close(), ОС в конечном итоге узнает, что соединение потеряно/отключено, и инициирует тот же сигнал SIGHUP, который закрывает большинство открытых процессов. /подпроцессы.

Несмотря на все это, возможны проблемы, например, несколько процессов продолжают работать даже после SIGHUP, потому что они были запущены с параметром nohup (или каким-то образом были отсоединены от текущего сеанса).

person Ani Menon    schedule 18.05.2016