You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 05:06:11