python会自动关闭SSH和Telnet吗
这可能是一种不好的做法,请原谅,但是当python在非telnet lib异常或非paramiko(SSH)异常上结束时,SSH或telnet连接会自动关闭吗?另外,sys.exit()是否会关闭脚本正在使用的所有连接?是的,系统(Linux和Windows)会跟踪进程使用的所有资源。它可以是文件、互斥体、套接字或其他任何内容。当进程死亡时,所有资源都被释放。使用哪种编程语言以及如何终止应用程序并不重要 这个规则有几个微妙的例外,比如服务器套接字或僵尸进程所持有的资源的WAIT_CLOSE状态,但一般来说,您可以假设每当进程终止时,所有资源都被释放 UPD。正如评论中提到的,操作系统不能保证资源被正确释放。在网络连接情况下,这意味着无法保证FIN数据包已发送,因此,尽管您的计算机上的所有内容都已清理完毕,但远程端点仍可以等待来自您的数据。理论上,它可以等待无限长的时间。因此,最好使用“finally”语句通知另一个端点关闭连接。在解释器中:python会自动关闭SSH和Telnet吗,python,ssh,telnet,paramiko,Python,Ssh,Telnet,Paramiko,这可能是一种不好的做法,请原谅,但是当python在非telnet lib异常或非paramiko(SSH)异常上结束时,SSH或telnet连接会自动关闭吗?另外,sys.exit()是否会关闭脚本正在使用的所有连接?是的,系统(Linux和Windows)会跟踪进程使用的所有资源。它可以是文件、互斥体、套接字或其他任何内容。当进程死亡时,所有资源都被释放。使用哪种编程语言以及如何终止应用程序并不重要 这个规则有几个微妙的例外,比如服务器套接字或僵尸进程所持有的资源的WAIT_CLOSE状态,
>>> 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 -