前言
在OS X中使用GAE引擎来科学上网比如goagent或者wallproxy,可能会在启动过程中出现如下报错然后导致服务启动不成功。
1 2 3 |
socket.error: [Errno 48] Address already in use //如上报错,错误号48;端口已被占用。 |
原因
其实就是因为你曾启动过相同或者类似的服务占用了这个端口,一般来讲,在Mac上直接用Python启动的话,会导致退出不完整,你不能通过点击GUI的“退出”按钮来一步到位,后台的Python进程还是存在的,而它就是一直占用端口不释放的元凶。
解决办法
一个是改掉默认的8087、8086端口,另一个,就是干掉占用端口的程序。
前者立竿见影,但缺点是你总不能一天换一个的吧,如果说是因为其他应用占用端口还好说,那要是因为退出不完整呢?所以,后者才是治标治本的解决办法。但是想要找到这个占用端口的程序,就要引入下面的内容了:
lsof命令
简介
lsof(list open files)命令是一个列出当前系统打开文件的工具。在类UNIX环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以我们使用它来找出占用了端口的程序,看看它究竟是不是冲突是不是错误。
lsof -i 用以显示符合条件的进程情况
所以,我们使用如下命令即可查找出占用了某个端口的程序和其对应的PID
1 2 3 |
sudo lsof -i:8087 //因为有些时候是以root身份运行,所以请务必加上sudo |
然后使用下面的命令干掉对应的进程:
1 |
sudo kill *pid*//*部分用对应进程的PID来填充哦 |
对了,如果你想要看看这个程序是什么,这里就不推荐使用命令行来完成了,当然,再次使用lsof命令是可以的,但小编还是推荐各位用“活动监视器”来查找pid——毕竟,系统有这个图形功能了。
本文由 落格博客 原创撰写:落格博客 » Mac OS X中解决socket.error: [Errno 48] Address already in use 端口占用问题
转载请保留出处和原文链接:https://www.logcg.com/archives/536.html
Thnak you very much!!
写得比较中肯,了解了。谢谢~