如何阻止Django自动重启占用MacOS本地80端口的进程?
解决MacOS上80端口被自动重启的Django进程占用问题
1. 定位进程的父进程
自动重启的进程通常由父进程管控,先找到目标进程的父PID(PPID):
sudo lsof -i :80 -P -n | grep LISTEN
从输出中提取两个Django进程的PPID,再查看父进程的名称:
ps -p <PPID> -o comm=
根据父进程类型(如launchd、supervisord等),对应执行后续步骤。
2. 排查launchd服务(父进程为launchd时)
搜索与Django、Python相关的launch项:
# 查看用户级服务 launchctl list | grep -i django launchctl list | grep -i python # 查看系统级服务(需sudo) sudo launchctl list | grep -i django sudo launchctl list | grep -i python
找到对应服务名后,停止并禁用它:
# 用户级操作 launchctl stop <服务名> launchctl disable gui/$(id -u)/<服务名> # 系统级操作 sudo launchctl stop <服务名> sudo launchctl disable system/<服务名>
若未找到明确服务名,可检查launchd配置文件目录:
- 用户级:
~/Library/LaunchAgents/ - 系统级:
/Library/LaunchDaemons/
找到包含Django/Python的.plist文件后,删除并卸载服务:
# 用户级 launchctl bootout gui/$(id -u)/<文件名(不带.plist)> rm ~/Library/LaunchAgents/<文件名>.plist # 系统级 sudo launchctl bootout system/<文件名(不带.plist)> sudo rm /Library/LaunchDaemons/<文件名>.plist
3. 排查进程管理工具(父进程为supervisord等时)
如果父进程是supervisord,停止并禁用服务:
sudo supervisorctl stop all sudo supervisorctl shutdown # 若为brew安装的supervisor,禁用开机启动 brew services stop supervisor
如果是pm2等其他工具,执行对应停止命令:
pm2 delete <进程名> pm2 save --force
4. 检查定时任务与启动脚本
查看是否有定时启动Django的任务:
# 用户级定时任务 crontab -l # 系统级定时任务 sudo crontab -l
若存在相关启动命令,删除对应行即可。同时检查是否有后台运行的启动脚本,直接终止脚本进程。
5. 强制终止进程树
若以上方法无效,直接杀死整个进程树,避免父进程重启子进程:
# 获取占用80端口的PID PID=$(sudo lsof -i :80 -t) # 终止进程树(先尝试温和终止,不行再强制) sudo pkill -TERM -P $PID sudo pkill -KILL -P $PID
最后验证结果:
sudo lsof -i :80
无输出即为成功。
内容的提问来源于stack exchange,提问作者Ryan Atwood
相关产品推荐
相关产品推荐

