当我尝试从 XAMPP 控制面板(Mac OS X 10.6.8 Snow Leopard)启动 Apache 时,出现以下错误弹出,并且 Apache 无法启动:
/Applications/XAMPP/xamppfiles/bin/apachectl: line 70: ulimit: open files: cannot modify limit: Invalid argument
(48)Address already in use: make_sock: could not bind to address [::]:80
10 分钟前,XAMPP 运行正常。我停止了 Apache 以添加一些.conf
文件,但重新启动时失败。我删除了所有新.conf
文件(即恢复到以前的状态),但现在我收到了上述消息。
我检查了 AppMonitor,看到了这些httpd
进程(一个_www
嵌套在根目录中)。刚刚尝试退出这些进程,但它们会在新的进程 ID 上自动重新启动,这并没有解决问题。
我尝试过完全重启,但仍然出现同样的错误(在启动任何应用程序之前)。如果有人知道如何解决这个问题,我将不胜感激。
答案1
它抱怨端口80
已被使用。在类似您的情况下,这通常是由于 Apache 已在(或仍在)运行所致。
正如您已经注意到的,仍有httpd
进程在运行。请确保先退出全部Apache HTTPD 进程,然后重新启动它。
答案2
这将永久禁用 httpd。
sudo launchctl unload -w /System/Library/LaunchDaemon/org.apache.httpd.plist
答案3
有两个因素可能导致该问题:Apple 的内置网络共享服务处于活动状态或僵尸 XAMPP 进程仍然处于活动状态。
如果这是由 Apple 的网络共享引起的,您可以通过转到System Preferences…
然后选择 来处理Sharing
。到达那里后,取消选中Web Sharing
— 基本上就是 Apache httpd
— 您的问题应该就解决了。
也就是说,如果这基本上是经过一些 XAMPP 调整后运行的 Apache“僵尸”实例,那么最好的选择是执行以下操作:
第一次运行lsof
(列出打开的文件)将列出系统上主动打开的所有文件。
sudo lsof | grep MAMP | grep apache
注意两个grep
命令通过管道连接在一起?我正在做的是获取打开的文件列表,然后过滤那些具有与 MAMP 相关的文件路径的文件(或者在您的情况下将其更改为 XAMPP 或您正在运行的任何文件夹/目录),然后我正在过滤apache
路径名。列表应该看起来像这样:
httpd 2204 jake 2w REG 1,2 24685 17953784 /Applications/MAMP/logs/apache_error.log
httpd 2211 jake 2w REG 1,2 24685 17953784 /Applications/MAMP/logs/apache_error.log
httpd 2212 jake 2w REG 1,2 24685 17953784 /Applications/MAMP/logs/apache_error.log
httpd 2213 jake 2w REG 1,2 24685 17953784 /Applications/MAMP/logs/apache_error.log
httpd 2214 jake 2w REG 1,2 24685 17953784 /Applications/MAMP/logs/apache_error.log
httpd 2215 jake 2w REG 1,2 24685 17953784 /Applications/MAMP/logs/apache_error.log
httpd 2216 jake 2w REG 1,2 24685 17953784 /Applications/MAMP/logs/apache_error.log
好的,这是一整套进程列表。Apache 的运行理念是只有一个父进程,并会生成许多子进程来处理流量。因此,如果您终止一个子进程,父进程会注意到它并重新生成一个新的子进程。
现在看看这个列表,通常该进程列表中编号最小的进程将是父进程(因为它当然在其他子进程之前启动),因此您应该终止该进程以终止所有进程。因此,在这种情况下,列表中编号最小的进程是2204
,因此只需运行以下命令:
kill 2204
然后父进程被终止,所有子进程也应该被删除。然后端口80
应该再次可用。