python是否会自动关闭SSH和Telnet

时间:2015-10-08 13:54:10

标签: python ssh telnet paramiko

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

2 个答案:

答案 0 :(得分:2)

在翻译中:

>>> 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     -                   

现在让我们杀掉Python,并在(kill -9 7934 && netstat -putelan | grep ":22")之后运行netstat

tcp        0      0 127.0.0.1:47382         127.0.0.1:22            TIME_WAIT   0          0          -                   

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

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

答案 1 :(得分:1)

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

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

<强> UPD 即可。正如评论中提到的那样,OS无法保证资源被正确释放。在网络连接情况下,这意味着无法保证FIN数据包已发送,因此尽管您的计算机上已清除所有内容,但远程端点仍可等待您的数据。从理论上讲,它可以无限期地等待。因此,最好使用“finally”语句通知另一个端点关闭连接。