XAMPP 无法在 Mac OS X 10.6.8 Snow Leopard 上启动 Apache

XAMPP 无法在 Mac OS X 10.6.8 Snow Leopard 上启动 Apache

当我尝试从 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应该再次可用。

相关内容