2016-05-18 2 views
2

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

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

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

+0

«Почему мы это делаем в первую очередь?» Что? Вы пытались не закрыть соединение, выйти из программы и посмотреть на сервере? –

+2

закрытие сеанса после завершения скрипта. Я думаю, это очевидно из вопроса. – KhaledMaged

ответ

3

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

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

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

В любом случае, это хорошая практика, чтобы закрыть сеанс независимо от того, что.

+0

Спасибо за ответ :) Итак, мы можем сказать, что если сеанс предназначен только для копирования файла (небольшой процесс), сеанс будет вскоре закрыт сам по себе. Короче говоря, для небольшого процесса закрытие сессии может быть пропущено. Длительный процесс, сеанс должен быть закрыт. Правильно ли я понял? – KhaledMaged

+0

Я думаю, что это хорошая практика, чтобы закрыть сеанс независимо от того, что. Но если вы этого не сделаете, ничего не произойдет. –

3

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

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

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

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

Смежные вопросы