python 是否自动关闭 SSH 和 Telnet

Does python automatically close SSH and Telnet

这可能是不好的做法,所以请原谅我,但是当 python 以非 telnet lib 异常或非 paramiko (SSH) 异常结束时,SSH 或 Telnet 连接会自动关闭吗?另外,sys.exit() 会关闭脚本正在使用的所有连接吗?

是的,系统(Linux 和 Windows)会跟踪您的进程使用的所有资源。它可以是文件、互斥量、套接字或其他任何东西。当进程死亡时,所有资源都被释放。使用哪种编程语言以及如何终止应用程序并不重要。

此规则有几个微妙的例外,例如 WAIT_CLOSE 服务器套接字的状态或僵尸进程持有的资源,但通常您可以假设只要您的进程终止,所有资源都会被释放。

UPD。正如评论中提到的,OS 不能保证资源被正确释放。在网络连接的情况下,这意味着无法保证 FIN 数据包已发送,因此尽管您的机器上的所有内容都已清理,远程端点仍然可以等待您的数据。理论上,它可以无限等待。因此,最好使用 "finally" 语句通知其他端点关闭连接。

在解释器中:

>>> c = paramiko.SSHClient()
>>> c.connect(hostname="127.0.0.1", username="funkysayu", password="xxxx")

所以在这里,让我们 运行 一个 netstat -putelan | grep ":22" :

tcp        0      0 127.0.0.1:47380         127.0.0.1:22            ESTABLISHED 1001       149999     7934/python2        
tcp        0      0 127.0.0.1:22            127.0.0.1:47380         ESTABLISHED 0          150000     -                   

现在让我们在 (kill -9 7934 && netstat -putelan | grep ":22")

之后终止 Python 和 运行 netstat
tcp        0      0 127.0.0.1:47382         127.0.0.1:22            TIME_WAIT   0          0          -                   

它没有正确关闭套接字(服务器在 TIME_WAIT),但连接不再存在于客户端。

@Heller 的回答解释了为什么它会这样工作。