如果我不关闭ssh会话会发生什么?

4

我刚开始学习Python。目前我正在使用它通过ssh连接到远程服务器,做一些事情(包括复制文件),然后关闭会话。

每次会话结束后,我都会执行ssh.close()sftp.close()。我这样做只是因为这是我在互联网上找到的典型方式。

我想知道如果我没有关闭会话而直接完成脚本会发生什么。这会影响服务器吗?这会对服务器产生某种(甚至非常小的)负载吗?我的意思是我们为什么要这样做呢?

2个回答

5
当进程关闭时(即使它仅仅是崩溃),操作系统会关闭由进程打开的任何未完成的TCP/IP连接。
因此,最终SSH会话将被关闭,即使您没有主动关闭它。显然,它将被突然关闭,而不是通过SSH的正确清理过程。这可能会在服务器日志中触发一些警告。
当进程运行时间较长但会话本身只短暂使用时,关闭会话尤其重要。
无论如何,关闭会话都是一个好的习惯。

3
我们在使用后关闭会话,这样可以正确/轻松地进行清理(关闭与之关联的所有正在运行的进程)。
当您使用 ssh.close() 时,它会生成一个 SIGHUP 信号。此信号会自动/立即杀死终端下的所有任务/进程。
当您突然结束会话而没有使用 close() 时,操作系统最终会知道连接已丢失/断开,并启动相同的 SIGHUP 信号,关闭大多数打开的进程/子进程。
即使如此,仍然可能存在问题,比如一些进程即使在收到 SIGHUP 后仍然继续运行,因为它们是使用 nohup 选项启动的(或者以某种方式与当前会话脱离了关系)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接