前言
在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
肖恩!!
寫得比較中肯,了解了。謝謝~