端口被占用了?5分钟教你优雅解决,告别暴力重启
大家好,我是33blog的技术小编。今天想和大家聊聊一个特别常见但又让人抓狂的问题——端口占用。相信不少开发小伙伴都遇到过这种情况:明明程序跑得好好的,突然就报错说端口被占用了。这时候你是不是也和我一样,第一反应就是——重启大法好?
一、那些年我们重启过的服务器
记得我刚入行的时候,遇到端口冲突就只会重启。直到有次在线上环境,组长看到我准备重启服务器时那个惊恐的表情…(后来才知道当时正在跑着重要服务)那次经历让我明白,暴力重启真不是个好习惯。
其实查端口占用特别简单,今天我就把这几年的经验总结成几个实用命令,保证你看完就能上手。
二、Windows用户的救星命令
先给Windows党来个简单粗暴的:
netstat -ano | findstr "8080"
这个命令会列出所有占用8080端口的进程(把8080换成你的端口号)。最后一列的数字就是进程PID,接着打开任务管理器,在”详细信息”里找到对应的PID,右键结束任务就行。
小技巧:我习惯用 netstat -ano
先看全部端口占用情况,就像看地图一样全局掌握。
三、Mac/Linux用户的优雅解法
苹果和Linux用户更简单:
lsof -i :8080
kill -9 [PID]
第一行命令会显示占用8080端口的进程信息,第二行用查到的PID直接结束进程。注意-9
是强制终止,如果只是普通服务,用kill [PID]
更优雅。
有次我遇到个顽固进程,普通kill不管用,这时候可以试试:
killall -9 [进程名]
四、进阶技巧:预防胜于治疗
分享几个我踩坑后总结的经验:
- 开发时尽量用高端口号(比如3000以上),避免和系统服务冲突
- 养成习惯,服务停止时先看日志确认端口释放
- 用
nohup
或screen
运行服务,避免终端关闭导致端口没释放
最近我在本地搭了个小工具,自动检测常用端口占用情况,有需要的话下次可以分享代码~
五、终极解决方案
如果你经常遇到这个问题,建议:
# Linux/Mac
alias portkill='lsof -i :$1 | awk "NR==2{print $2}" | xargs kill -9'
把这个加到~/.bashrc
里,以后只要portkill 8080
就能一键解决,是不是很方便?
好了,今天的分享就到这里。记住啊,下次遇到端口占用,别再条件反射重启了!如果觉得有用,欢迎转发给身边还在重启的小伙伴~
终于找到靠谱的解决方法了!每次重启服务器都被领导骂,这下可以交差了👍