在 Mac OSX 端口 80 上杀死一个未知的自重启服务器

Posted

技术标签:

【中文标题】在 Mac OSX 端口 80 上杀死一个未知的自重启服务器【英文标题】:Killing an unknown self restarting server on port 80 Mac OSX 【发布时间】:2017-01-11 14:20:59 【问题描述】:

我有一个在 80 端口上运行的服务器,但我不知道它是什么或它来自哪里。当我跑步时

sudo lsof -i :80 | grep LISTEN

我明白了

httpd      80    root    5u  IPv6 0x91f5a9de62859cfd      0t0  TCP *:http (LISTEN)
httpd     694    _www    5u  IPv6 0x91f5a9de62859cfd      0t0  TCP *:http (LISTEN)

我尝试使用 PID 输入获取进程名称,但我得到的只是“httpd”或“FOREGROUND”。

当我终止 PID 时,进程会以新的 PID 重新启动。我想我必须在发布时停止它。

如何阻止此服务器在启动时运行?

如果有帮助,我正在尝试释放端口 80 以使用 MAMP 上的 apache 服务器。

【问题讨论】:

如果你在浏览器中打开http://localhost会得到什么(当然是在同一台机器上)? 奇怪的是,我得到一个页面,上面写着

“它有效!”

我一定是很久以前在 80 端口上安装了一个服务器,并且有一个测试文件确认一切正常。但我什么都不记得了;如果我知道如何确定这是哪台服务器就好了 【参考方案1】:

这只是一个猜测,但它可能是 apache 的内置版本,由 launchd(OS X 的守护进程管理器)启动(并重新启动)。默认情况下它是禁用的,但可能已经以某种方式启用。您可以尝试禁用它:

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

如果不这样做(它会说“找不到指定的服务”),您可以通过查找主进程的 PID(即以 root 身份运行,而不是 _www):

sudo launchctl list | grep <masterPID>

这不一定能准确地告诉你发生了什么,但可能会为你指明正确的方向。

【讨论】:

感谢您提供的所有信息!这真的很有帮助,现在我将简单地停止“apachectl”进程。但随着我手头有更多时间,我肯定会研究更多的技术方面 我一直在努力解决端口 80 上无法终止的服务。我所做的一切都无法阻止它,但是您的第一个解决方案有效。这有什么负面影响吗? @KevinF。除非有人在使用该服务(不太可能),否则关闭它应该是绝对安全的。 这是给我的!谢谢!!【参考方案2】:

就像 Gordon 建议的那样,这是 Apache Web 服务器的内置版本。

你可以用

来阻止它
sudo apachectl stop

顺便说一句,这个网络服务器的配置可以在 /etc/apache2/httpd.conf 目录中找到。

【讨论】:

非常感谢,我不知道为什么,但是当我没有以 root 身份登录时尝试“apachectl stop”时,它永远不会起作用(即使使用“sudo”首选项” . 现在一切都刚刚好!【参考方案3】:

这种情况经常发生在我身上。 正如@Gordon Davisson 解释的那样,很可能是 launchdeamon 进程与您设置的服务发生冲突。 一定要停止 apachetl 服务器。

sudo apachetl -k stop

尝试找到所有的httpd进程,它们应该是最后一个

sudo lsof -i :80 // without grep

那么得到第一个进程(最有可能在1000s)也应该是最低的。

sudo kill <firstHttpdPID>

这应该会杀死所有运行该 httpd 实例的进程,然后您只需启动您的服务器即可。 不过必须先停止它,否则它会继续运行。

【讨论】:

【参考方案4】:

Mac OSX 与 Apache 捆绑在一起,但它已停用。您可能以某种方式激活了它。就我而言,我之前已经安装了 XAMPP 并在 /etc/apache2/httpd.conf 中配置了一些东西,这些东西将我的端口 localhost:80 引导到带有 It Works!html 页面。

TLDR,解决方案是停用 Apache2 服务器。 转到您的终端,然后输入以下内容

sudo apachetl -k stop

就我而言,它返回以下内容:

AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using Shafies-MacBook-Pro.local. Set the 'ServerName' directive globally to suppress this message
httpd (no pid file) not running

如果您在浏览器上输入localhost,端口 80 将不再处于活动状态,您将不会再看到 It Works!

就上下文而言,我很久以前就删除了 XAMPP,但不知道我的 localhost:80 仍然处于活动状态。我无法将虚拟域 -- posts.com 重定向到我的 kubernetes YAML 配置文件的本地主机端口。

这是我的ingress-srv.yaml 文件:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-srv
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/use-regex: 'true'
spec:
  rules:
    - host: posts.com
      http:
        paths:
          - path: /?(.*)
            backend:
              serviceName: client-srv
              servicePort: 3000

我欺骗了操作系统将我的posts.com 重定向到localhost:80,方法是在位于/etc/hosts 的主机文件中添加以下行

127.0.0.1 posts.com

由 SM

【讨论】:

以上是关于在 Mac OSX 端口 80 上杀死一个未知的自重启服务器的主要内容,如果未能解决你的问题,请参考以下文章

安装 SQL Developer mac osx 10.9.1

如何在 mac osx 中通过 ant 脚本杀死节点服务器

sh 如何杀死mac os x终端上的端口

sh 如何杀死mac os x终端上的端口

windows下端口占用解决方法-查看和杀死占用端口进程

mac下8080端口到80端口的转发