python会自动关闭SSH和Telnet吗

python会自动关闭SSH和Telnet吗,python,ssh,telnet,paramiko,Python,Ssh,Telnet,Paramiko,这可能是一种不好的做法,请原谅,但是当python在非telnet lib异常或非paramiko(SSH)异常上结束时,SSH或telnet连接会自动关闭吗?另外,sys.exit()是否会关闭脚本正在使用的所有连接?是的,系统(Linux和Windows)会跟踪进程使用的所有资源。它可以是文件、互斥体、套接字或其他任何内容。当进程死亡时,所有资源都被释放。使用哪种编程语言以及如何终止应用程序并不重要 这个规则有几个微妙的例外,比如服务器套接字或僵尸进程所持有的资源的WAIT_CLOSE状态,

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

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

这个规则有几个微妙的例外,比如服务器套接字或僵尸进程所持有的资源的WAIT_CLOSE状态,但一般来说,您可以假设每当进程终止时,所有资源都被释放

UPD。正如评论中提到的,操作系统不能保证资源被正确释放。在网络连接情况下,这意味着无法保证FIN数据包已发送,因此,尽管您的计算机上的所有内容都已清理完毕,但远程端点仍可以等待来自您的数据。理论上,它可以等待无限长的时间。因此,最好使用“finally”语句通知另一个端点关闭连接。

在解释器中:

>>> c = paramiko.SSHClient()
>>> c.connect(hostname="127.0.0.1", username="funkysayu", password="xxxx")
在这里,让我们运行一个
netstat-putelan | grep:22“

现在让我们杀死Python,然后运行netstat(
kill-97934&&netstat-putelan | grep:22“

它无法正确关闭套接字(服务器正在等待),但连接不再存在于客户端


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

我认为您应该尝试关闭finally block内的所有连接,请查看此链接为什么此答案被否决?这是Linux资源管理的一个很好的概述。操作系统可以跟踪自己的操作系统级资源,但它不会自动知道如何处理任意资源,例如您的连接可能在远程机器上启动的资源。是的,实际上这是一个很好的观点。我更新了我的答案以反映这一点。
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     -                   
tcp        0      0 127.0.0.1:47382         127.0.0.1:22            TIME_WAIT   0          0          -