Windows 端口占用查看/释放 [包含80端口占用与释放] - 学习/实践

1.应用场景

主要用于windows下进行环境搭建,遇到端口占用时的解决思路与办法

如: 本地进行开发环境搭建, 或是通过本地主机,或是虚拟机[virtrulbox/vagrant] 或是docker

2.学习/操作

环境:

Windows 10 64位 

 

1.端口

"端口"是英文port的意译,可以认为是设备与外界通讯交流的出口。端口可分为虚拟端口和物理端口,其中虚拟端口指计算机内部或交换机路由器内的端口,不可见。例如计算机中的80端口、21端口、23端口等。物理端口又称为接口,是可见端口,计算机背板的RJ45网口,交换机路由器集线器等RJ45端口。电话使用RJ11插口也属于物理端口的范畴  -- 百度百科。

 

这里则主要是指虚拟端口

 

2.端口占用[应用服务占用/系统服务占用]

问题提示:Ports不可用等。

导致问题:在日常工作中,经常会碰到启动某个应用时,提示xxx端口已经并占用,导致当前应用无法正常启动。

解决思路:找到占用特定端口的应用并将其释放。具体步骤如下:

 

2.1 cmd下查找占用端口进程号  //这里以 80 端口为例

输入 netstat -ano | findstr 80  回车

由上可知:

80端口被PID=9900 的程序/服务占用

 

2.2 查找PID=9900的应用/服务

输入 tasklist | findstr 9900

由上可知:

进程号为9900属于httpd.exe 即 apache服务所有, 也即apache占用80端口

如果为其他应用占用80端口,需要释放, 步骤见 2.3

 

2.3 释放目标端口

即: 停止占用端口的服务/应用

 

方式有两个:

方式一:命令行杀死进程  //只是针对单一进程,没有子进程而言,  有时候未必生效,

 

方式二:

通过任务管理器

找到目标进程号所在的应用, 选中, 点击结束任务即可

进行确认即可. 

这里只是apache具有自我重启机制,所以会另启动进程重新占据80端口, 占据80端口是配置文件定义的,可以修改.

到这里已经问题已经基本解决。

 

 

但是:

总有幺蛾子出现,在帮同事使用docker搭建本地环境,有提示80端口不可用

查看之后发现是一个PID=4的进程在监听, 查看PID=4的应用/服务,

发现是系统服务,任务管理器中,该服务的描述为 NT kernel & System 

本来以为正常释放端口即可,发现该服务根本无法结束,端口始终无法释放.

 

搜索一圈之后,找到相同问题提及提供解决方案的帖子,如下:

https://www.cnblogs.com/xiohao/p/4282288.html  //80端口被NT kernel & System 占用pid 4

 

原因:该进程是Http.sys。它是http API的驱动组件,Http栈服务器。如果该端口被Http.sys占用,说明一些正在使用http.sys的应用程序在运行。这就是阻止Apache运行的原因,因为Http.sys占用着80端口。

解决办法:

1.cmd 管理员权限运行 netsh http show servicestat 查看信息

2.net stop http  //停止http服务 按y确定

3.Sc config http start= disabled  //停止其启动

 

然后启动Apache或者docker容器,可以正常启动,不再报端口不可用错误

最火查看一下 netstat -ano

发现pid 4占用了其他端口 , 如445端口。

 

 

后续补充
...

3.问题/补充

TBD

4.参考

https://www.cnblogs.com/xiohao/p/4282288.html  //80端口被NT kernel & System 占用pid 4

后续补充

...