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

macOS无法移除默认Apache,XAMPP本地服务被占用求助

macOS XAMPP Apache 被未知进程占用 localhost 问题

我花了两天时间排查这个问题,至今毫无头绪。在macOS上用XAMPP跑Apache服务器,但localhost被某个进程占用,无法访问我XAMPP里的项目。

浏览器输入localhost显示的是“It works!”,不是我在XAMPP文件夹里编写的PHP代码。用XAMPP的直接IP能正常访问,而且我已经在XAMPP里开启了转发到localhost的选项。

我试过网上各种卸载系统预装Apache的命令:

sudo apachectl stop

sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist

但执行任何一条都报错:

/System/Library/LaunchDaemons/org.apache.httpd.plist: Could not find specified service
Unload failed: 113: Could not find specified service

还试过这两条命令:

sudo killall httpd && sudo launchctl unload /.System/Library/LaunchDaemons/org.apache.httpd.plist

sudo killall httpd 

结果都是提示:No matching processes found。

感觉我机器上有个清不掉的“幽灵”Apache服务器,除了重装系统,还有别的解决办法吗?

以下是80端口的连接日志(来自sudo lsof -i 80):
关闭屏幕时间前:

COMMAND   PID USER   FD   TYPE             DEVICE SIZE/OFF NODE     NAME
webfilter 789 root 1208u  IPv4 0x5706a7f639e7fa1f      0t0  TCP localhost:64814->localhost:http (CLOSED)
webfilter 789 root 1210u  IPv4 0x5706a7f639ec1f77      0t0  TCP localhost:64816->localhost:http (CLOSED)
webfilter 789 root 1215u  IPv4 0x5706a7f639ec14cf      0t0  TCP localhost:64818->localhost:http (CLOSED)
webfilter 789 root 1216u  IPv4 0x5706a7f639dc6a1f      0t0  TCP localhost:49951->localhost:http (CLOSED)
webfilter 789 root 1235u  IPv6 0x5706a7eca5697817      0t0  TCP localhost:65520->localhost:http (CLOSED)
webfilter 789 root 1236u  IPv4 0x5706a7f639e7c4cf      0t0  TCP localhost:49953->localhost:http (CLOSED)
webfilter 789 root 1240u  IPv4 0x5706a7f639de3f77      0t0  TCP localhost:49955->localhost:http (CLOSED)
webfilter 789 root 1251u  IPv4 0x5706a7f639d37a1f      0t0  TCP localhost:49626->localhost:http (CLOSED)
webfilter 789 root 1254u  IPv4 0x5706a7f639dd0f77      0t0  TCP localhost:49628->localhost:http (CLOSED)
webfilter 789 root 1257u  IPv4 0x5706a7f639e96a1f      0t0  TCP localhost:49630->localhost:http (CLOSED)
webfilter 789 root 1258u  IPv4 0x5706a7f639e6af77      0t0  TCP localhost:49640->localhost:http (CLOSED)
webfilter 789 root 1260u  IPv6 0x5706a7eca569be17      0t0  TCP localhost:65523->localhost:http (CLOSED)
webfilter 789 root 1263u  IPv6 0x5706a7eca569b017      0t0  TCP localhost:65525->localhost:http (CLOSED)
webfilter 789 root 1264u  IPv4 0x5706a7f63a224a1f      0t0  TCP localhost:49642->localhost:http (CLOSED)
webfilter 789 root 1265u  IPv4 0x5706a7f639d5df77      0t0  TCP localhost:49644->localhost:http (CLOSED)

关闭屏幕时间后:

COMMAND  PID   USER   FD   TYPE             DEVICE SIZE/OFFNODE NAME
httpd   9042   root    7u  IPv6 0x1d7fb05cf9c725c1      0t0  TCP *:http (LISTEN)
httpd   9046 daemon    7u  IPv6 0x1d7fb05cf9c725c1      0t0  TCP *:http (LISTEN)
httpd   9047 daemon    7u  IPv6 0x1d7fb05cf9c725c1      0t0  TCP *:http (LISTEN)
httpd   9048 daemon    7u  IPv6 0x1d7fb05cf9c725c1      0t0  TCP *:http (LISTEN)
httpd   9049 daemon    7u  IPv6 0x1d7fb05cf9c725c1      0t0  TCP *:http (LISTEN)
httpd   9050 daemon    7u  IPv6 0x1d7fb05cf9c725c1      0t0  TCP *:http (LISTEN)
httpd   9095 daemon    7u  IPv6 0x1d7fb05cf9c725c1      0t0  TCP *:http (LISTEN)
httpd   9109 daemon    7u  IPv6 0x1d7fb05cf9c725c1      0t0  TCP *:http (LISTEN)
httpd   9110 daemon    7u  IPv6 0x1d7fb05cf9c725c1      0t0  TCP *:http (LISTEN)

解决步骤

1. 强制终止占用端口的httpd进程

从关闭屏幕时间后的日志可以看到,确实有httpd进程在监听80端口,但系统默认的launchctl找不到对应服务,说明这是第三方安装或非常规启动的Apache。

直接通过PID终止这些进程:

sudo kill -9 9042 9046 9047 9048 9049 9050 9095 9109 9110

如果后续还有新的httpd进程自动启动,批量终止所有相关进程:

sudo pkill -9 httpd

2. 检查第三方Apache服务(比如Homebrew)

很多开发者会用Homebrew安装Apache,先检查Homebrew的服务列表:

brew services list

如果看到httpd或apache2处于started状态,立即停止:

brew services stop httpd

如果不需要该服务,可以直接卸载:

brew uninstall httpd

3. 修改XAMPP Apache监听端口(备选方案)

如果找不到占用80端口的根源,直接修改XAMPP的端口避免冲突:

  1. 打开XAMPP控制面板,点击Apache的Config按钮,选择Apache (httpd.conf)
  2. 找到Listen 80,修改为Listen 8080(或其他未被占用的端口)
  3. 找到ServerName localhost:80,修改为ServerName localhost:8080
  4. 保存文件后重启XAMPP的Apache服务,之后通过localhost:8080访问项目

4. 检查自定义Launch服务

系统默认服务在/System/Library/LaunchDaemons,但第三方服务可能在/Library/LaunchDaemons或~/Library/LaunchAgents目录下,检查这些位置的httpd相关plist文件:

ls /Library/LaunchDaemons | grep httpd
ls ~/Library/LaunchAgents | grep httpd

如果找到对应文件,先卸载服务再删除文件:

sudo launchctl unload -w /Library/LaunchDaemons/[对应的plist文件名]
sudo rm /Library/LaunchDaemons/[对应的plist文件名]

5. 排查屏幕时间的影响

从日志来看,关闭屏幕时间后出现了httpd进程,说明屏幕时间的webfilter服务可能和Apache存在冲突,或者触发了某种代理服务。可以尝试完全关闭屏幕时间,或者在屏幕时间设置中排除XAMPP相关程序。


内容的提问来源于stack exchange,提问作者Jarod Rakoff

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 05:37:08