macOS 解决端口占用并自动释放端口脚本
在 macOS 开发过程中,经常会遇到端口被占用的情况(例如 8080
、3306
、5173
等),如果不解决,服务就无法正常启动。本文总结了常用的解决方法,并提供一个自动释放端口的小脚本,方便日常开发使用。
1. 手动解决端口占用
1.1 查找占用端口的进程
以 8080
为例:
lsof -i :8080
示例输出:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 12345 xxx 200u IPv6 0xabcdef1234567890 0t0 TCP *:http-alt (LISTEN)
可以看到是进程 PID=12345
占用了端口 8080
。
1.2 结束进程
kill -9 12345
也可以一步到位:
kill -9 $(lsof -t -i :8080)
1.3 确认端口是否释放
再次检查:
lsof -i :8080
如果没有输出,说明端口已释放。
2. 自动释放端口脚本
频繁手动执行太麻烦,可以写一个脚本自动化。
2.1 创建脚本文件
新建脚本:
nano ~/killport.sh
写入以下内容:
#!/bin/bash
# 自动释放指定端口
# 用法: ./killport.sh 8080
if [ -z "$1" ]; then
echo "❌ 请输入端口号,例如: ./killport.sh 8080"
exit 1
fi
PORT=$1
PID=$(lsof -t -i :$PORT)
if [ -z "$PID" ]; then
echo "✅ 端口 $PORT 没有被占用"
else
echo "⚠️ 端口 $PORT 被进程 $PID 占用,正在结束..."
kill -9 $PID
echo "✅ 端口 $PORT 已释放"
fi
2.2 赋予执行权限
chmod +x ~/killport.sh
2.3 使用方式
直接运行脚本并传入端口号:
~/killport.sh 8080
效果:
- 如果端口空闲 → 提示未占用
- 如果端口被占用 → 自动 kill 掉进程并释放端口
3. 可选:添加到全局命令
如果经常用,可以把脚本加入 PATH,方便全局使用:
echo 'export PATH=$PATH:~' >> ~/.zshrc
source ~/.zshrc
之后就可以直接运行:
killport.sh 8080
4. 总结
- 手动方式:
lsof -i :端口号
+kill -9 PID
- 自动方式:编写
killport.sh
脚本,一键释放端口 - 可选:配置到全局命令,随时使用
这样在 macOS 开发时,再也不用担心端口被占用了 🚀