SYSTEM(PID 4)正在使用端口80,那是什么?


9

我正在尝试将端口80用于我的应用程序服务器,但是当我执行“ netstat -aon”时,我得到了

TCP 0.0.0.0:80 0.0.0.0:0侦听4

当我在任务管理器中查找进程时,它显示PID 4是SYSTEM,就这样,不是扩展名。。。什么都没有,只有“ SYSTEM”。这里发生了什么?

恐怕要结束此过程,该怎么办?


net stop http为我工作
Saurabh Sinha

Answers:


14

尽管人们指出了特定的服务(例如“ Web部署代理服务”),但这无法解决根本原因。如果您仅禁用触发问题的服务,则将来它可能会以不同的形式再次抬起头来。因此,有必要了解出了什么问题,因为这将导致更好的修复。

当应用服务器希望完全控制端口80时,就会出现此问题。这与Windows的功能冲突,Windows的功能旨在使多个进程能够处理端口80上的请求。完全有可能有任意数量的进程都在端口上接收HTTP请求80,因为Windows具有内置的HTTP调度机制。每个进程都可以告诉Windows它要处理哪些URL。

但是,如果应用程序服务器完全忽略了这一点,那么您又回到了较不灵活的老式套接字世界,那里只有一个进程可以接收发往任何特定端口的请求。

那可能很好-如果您真的不想要除端口80上处理HTTP请求的特定进程以外的任何东西,那么可以使用不能支持Windows提供的更灵活机制的应用程序服务器。(而且某些流行的应用程序服务器也有此限制。例如,AFAIK,Tomcat无法与其他应用程序很好地兼容,并且坚持要全部使用80端口。因此,如果您使用其他人的应用程序服务器,则可能不切实际。使其适应使用首选机制。)

Windows尝试通过不将其分发机制绑定到端口80来适应这种不灵活的服务,直到有人主动提出要求为止。(这就是为什么您一开始不一定会看到问题,但是在进行某种更新或配置更改后可能会遇到此问题的原因。)但是,依靠它不是一个非常可靠的解决方案-您实质上是希望运气不高尝试在应用服务器启动之前在端口80下侦听。(由于多种原因,进程可能会推测性地尝试在端口80上注册某些URL,并在不允许的情况下退出。)

因此,如果您希望一项服务具有对端口80的独占访问权,则最好告诉Windows。试图关闭所有可能尝试使用常规端口共享机制的服务并不够好,因为很难确定已经找到了所有服务。(特别是在Windows更新似乎默认情况下更改了什么的情况下。)禁用已知的方法可能是一个好习惯,但是最好从两端着手:禁用不需要的服务,并确保它不会对于您不认识的人可能会绊倒您。

默认情况下HTTP.SYS(Windows中的基础端口共享HTTP调度机制)能够侦听所有地址。但是你可以告诉它不要。此页面显示了一种执行此操作的方法:http : //www.mikeplate.com/2011/11/06/stop-http-sys-from-listening-on-port-80-in-windows/

这是一种相对简单的方法,因为它仍然允许在本地主机上侦听IPv6。它只是释放了IPv4端口80。您可以使用更专业的配置来进一步扩展它。(您甚至可以HTTP.SYS完全禁用,但是使用80以外的端口可能会破坏某些功能,因此可能会引起问题。)

但是无论您做什么,关键是要确保HTTP.SYS不要尝试侦听您关心的IP地址上的端口80。完成此操作后,您不必担心禁用服务,也不必担心其他重新引入问题的更改。如果您已确保所需的端点实际上不在端口共享的范围之内,那么您应该发现系统进程已停止与其绑定。


感谢您提供非常有用的答案。作为一个Unix用户,我不知道Windows有一个HTTP调度机制,允许多个同步过程,在端口80请求做出响应
安东尼纪勤

11

罪魁祸首是Web部署代理服务。

net stop http停止名为“ Web Deployment Agent Service”的服务更好的解决方案。


3
男子!糟糕的Microsoft做法!我不得不花几个小时试图找出为什么有一个IIS实例(通过telnet连接时通过标头判断)在0.0.0.0:80上侦听并阻止Apache启动,甚至在我从Windows功能/角色删除IIS时也是如此。是的,它是Web部署代理服务,阻止了任何地址上对端口80的所有访问!男子!
弗朗西斯科·扎拉波佐(

2
应用服务器使用不良做法的情况更多。Windows具有一种机制,旨在使多个进程能够处理端口80上的HTTP请求。IIS完全有可能与所有其他处理端口80请求的其他应用程序共存。这就是系统进程为您侦听80的原因-它可以将每个请求分派给负责特定URL的任何进程。不幸的是,如果应用服务器完全忽略了这一点,并希望拥有端口80的全部所有权,那么一切都会出错。如果应用服务器不忽略约定,则不会出现此问题。
伊恩·格里菲斯

1
好的,我刚刚了解到Nginx忽略了“此MS”约定...而只是禁用了该服务。
詹斯·科赫

4
您需要停止和禁用的服务的特定名称是World Wide Web Publishing Service。虽然“ net stop http”本身是一个非常残酷的答案,但充满了讨厌的副作用-诸如打印后台处理程序和Windows 10登录过程的一部分之类的服务都依赖于http-如果尝试,它将提供以下内容的列表:依赖于http的服务以及退出选项。我发现一张列表中的一小部分服务是我发现WWW Publishing Service是罪魁祸首的方式。
杰西卡·潘内尔

以我为例,是万维网发布服务阻止了其他所有程序监听端口80。我可以同时运行多个apache和nginx,而不会出现问题,但是当最近Windows Update更新之后,万维网发布服务出现问题时,否则端口80停止工作。
J. Wrong

4

很有可能是IIS 6.0或更高版本。

内核模式运行的HTTP协议栈(HTTP.sys)接收客户端请求,并将其路由到适当的请求队列。在用户模式下运行的工作进程将请求直接从其自己的内核请求队列中拉出,从而消除了当Web服务器将请求发送到高级服务器时在IIS 5.0中发生的过程跳(以及在IIS 5.0隔离模式中也发生了)。 -隔离,进程外应用程序。由于在工作进程隔离模式中消除了这些额外的进程跃点,因此IIS可以在不牺牲性能的情况下提供应用程序隔离。


嗯,我以为IIS显示为“ inetinfo.exe”-猜想在某些情况下不是。
马克·亨德森

是的!:)两者同时显示-用户模式下的东西放在inetfino.exe中,但是内核模式下的东西来自“系统”。
Mark Allen

1

尝试HTTP.SYS通过进入Device Manager/Non Plug and Play Drivers和选择HTTP来停止,尝试停止它,您将看到触发此HTTP使用端口80的服务。


0

最后我检查了一下,您无法结束“系统”过程,如果您这样做了,我想它将会产生灾难性的影响。我也不会在现在使用的PC上尝试它!

Windows内部似乎正在侦听某些内容:80-我猜测这可能是恶意的。找出答案的最佳方法是:

a)打开Web浏览器到localhost,看看会发生什么

b)启动Telnet和telnet到localhost 80并运行一些基本的HTTP GET(例如GET /),然后查看返回的内容

如果您认为自己可能正在托管恶意软件,则B是更好的选择,因为您确实不想再次感染自己。虽然也许没关系。


它不可能是恶意软件,因为在我的VPS上没有启动并运行很长时间。我也不用它来浏览网页,所以……

0

我在以下位置找到了该问题的答案:https : //superuser.com/questions/352017/pid4-using-port-80

具体来说,当它是系统进程4时,您需要禁用HTTP.sys驱动程序,该驱动程序是由其他服务(例如Windows 7或2008上的Windows远程管理或Print Spooler)按需启动的。

  1. 转到设备管理器,从菜单/视图中选择“显示隐藏的设备”,转到“非即插即用驱动程序” / HTTP,双击将其禁用(或将其设置为手动,某些服务取决于它)。

重新启动并使用netstat -nao | 找到“:80”以检查是否仍使用80。

我还尝试通过仅运行“ net stop http”来恢复端口,但是该端口似乎从未释放过。上面的代码对我确实有用,并且II不需要依赖于该驱动程序的其他服务。


0

Windows Sync Sh​​are是Windows 2012 R2上杀死我们的原因。停用此功能后,一切正常。


0

就我而言,这是由于炭黑抗病毒以某种方式在端口80上受了束缚。不知道它是如何固定的,请咨询您的服务器/网络团队!


-1

我已经通过stackoverflow问题解决了这个问题。 单击此链接找到有关如何使IIS停止在端口80上侦听指定IP地址的解决方案。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.