引言
今天遇到一个问题,当我在启动flask命令的时候出现了端口被占用的错误,联想到以前也有遇到过这种情况,所以我现在想总结一下之前一直都忽略的问题。
OSError: [WinError 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝试。
这是今天我在运行项目的同时遇到的一个情况,另外我也很久没有见过控制台给我报中文错误了,除了我自己定义的异常错误类,所以感觉这个问题很有纪念意义。
起因是当我运行一个flask项目的时候,控制台抛错误,说的就是标题的内容,然后我大概清楚可能是端口被占用的问题,但我之前基本都没有遇到过这个问题,可能是Linux卡的原因,所以我不会开太多的东西,而这次算阴差阳错,Windows下我可能就开得多了,然后我就去排原因。
中间看了一个教程使用IIS观看网站进程,我感觉挺新鲜的,就按照配置也下了看看,但后来发现其实并没有什么用,项目启动后并没有部署,好像它没有任何作用,另外我也没有这个需求,因为项目一般都是在Linux上跑,so,就看看。
然后我就去以命令行的方式进行查看本地项目的端口占用情况:
C:\>Users\xuzhenggen> netstat -ano|findstr 8082
TCP 0.0.0.0:8000 0.0.0.0:0 LISTENING 9064
C:\>Users\xuzhenggen> tasklist |findstr 9064
QQ.exe 8124 Console 3 227,448 K
C:\Users\xuzhenggen> taskkill /pid 9064 /F
成功: 已终止 PID 为 8124 的进程。
上述我在检查过程中因为发现是QQ占用了我的项目进程,然后我直接手动关了,再次启动项目,成功。所以只要有报上述错误,那么基本就是这个问题,可能开的东西越多,占线的概率那么就越大。
Linux中进程管理
之前用linux的时候基本没有遇到这种问题,但还是记录一下吧,可能以后有用到的时候。。。
1.查找被占用的端口
netstat -tln
netstat -tln | grep 80
netstat -tln 查看端口使用情况,而netstat -tln | grep 80 则是只查看端口80的使用情况
2.查看端口属于哪个程序?端口被哪个进程占用
lsof -i :80
3.杀掉占用端口的进程
kill -9 进程id