【问题标题】:What would happen if I don't close an ssh session?如果我不关闭 ssh 会话会发生什么?
【发布时间】:2016-09-14 11:43:29
【问题描述】:
我是 Python 新手。目前我正在使用它通过 ssh 连接到远程服务器,做一些事情(包括复制文件),然后关闭会话。
每次会话后我都会做ssh.close() 和sftp.close()。我这样做是因为这是我在互联网上找到的典型方式。
我想知道如果我只是完成我的脚本而不关闭会话会发生什么。会影响服务器吗? 这会在服务器上产生某种(甚至很少)负载吗?我的意思是为什么我们首先要这样做?
【问题讨论】:
标签:
python
session
ssh
sftp
conceptual
【解决方案1】:
当进程关闭时(即使它只是崩溃),(本地)操作系统会关闭进程打开的任何挂起的 TCP/IP 连接。
所以最终 SSH 会话会关闭,即使您没有关闭它。显然,它突然关闭,没有适当的 SSH 清理。所以它可能会在服务器日志中触发一些警告。
关闭会话尤其重要,当进程运行时间很长,但会话本身只使用很短的时间。
无论如何,关闭会话是一个好习惯。
【解决方案2】:
我们在使用后关闭会话以便正确/轻松地完成清理(关闭与其关联的所有正在运行的进程)。
当您ssh.close() 时,它会生成SIGHUP 信号。该信号自动/立即杀死终端下的所有任务/进程。
当你突然结束没有close()的会话时,操作系统最终会知道连接丢失/断开并启动相同的SIGHUP信号 strong> 关闭大多数打开的进程/子进程。
即使在SIGHUP 之后,仍然存在诸如很少有进程继续运行之类的可能问题,因为它们以nohup 选项开始(或者以某种方式与当前会话解除关联)。