我是Python的新手。目前我正在使用它通过ssh连接到远程服务器,做一些事情(包括复制文件),然后关闭会话。
每次会话结束后,我都会ssh.close()
和sftp.close()
。我这样做是因为这是我在互联网上找到的典型方式。
我想知道如果我在没有关闭会话的情况下完成我的脚本会发生什么。这会影响服务器吗? 这会在服务器上产生某种(甚至非常小的)负载吗? 我的意思是我们为什么要这样做呢?
答案 0 :(得分:3)
当进程关闭时(本地)操作系统关闭进程打开的任何挂起的TCP / IP连接(即使它只是崩溃)。
因此,即使您不关闭SSH会话,最终也会关闭SSH会话。显然,如果没有正确的SSH清理,它会突然关闭。因此,它可能会在服务器日志中触发一些警告。
当流程长时间运行时,关闭会话尤其重要,但会话本身仅在短时间内使用。
无论如何,无论如何关闭会话都是一种很好的做法。
答案 1 :(得分:3)
我们在使用后关闭会话,以便正确/轻松地完成清理(关闭与之关联的所有正在运行的进程)。
当您 ssh.close()
时,它会生成SIGHUP
信号。此信号会自动/立即终止终端下的所有任务/进程。
当您突然结束没有close()
的会话时,操作系统最终会知道连接丢失/断开连接并且启动相同的{{1} } signal ,它关闭了大多数开放的流程/子流程。
即使在SIGHUP
之后仍然存在少数流程继续运行等问题,因为它们以SIGHUP
选项启动(或者以某种方式与当前会议脱离关系。)