问题提示:Ports不可用等。
导致问题:在日常工作中,经常会碰到启动某个应用时,提示xxx端口已经并占用,导致当前应用无法正常启动。
解决思路:找到占用特定端口的应用并将其释放。具体步骤如下:
2.1 cmd下查找占用端口进程号 //这里以 80 端口为例
输入 netstat -ano | findstr 80 回车
![Windows 端口占用查看/释放 [包含80端口占用与释放] - 学习/实践 Windows 端口占用查看/释放 [包含80端口占用与释放] - 学习/实践](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzY5MS83MGE1MzQ2MzkyNDc4MzNlNGUyYzMxYzQ5ODMzOGQxYi5wbmc=)
由上可知:
80端口被PID=9900 的程序/服务占用
2.2 查找PID=9900的应用/服务
输入 tasklist | findstr 9900
![Windows 端口占用查看/释放 [包含80端口占用与释放] - 学习/实践 Windows 端口占用查看/释放 [包含80端口占用与释放] - 学习/实践](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzQ2MC85NzlhOWM4NTM0YzMzMDAwMmI2OTYzNWVhZGU1NDY0NC5wbmc=)
由上可知:
进程号为9900属于httpd.exe 即 apache服务所有, 也即apache占用80端口
如果为其他应用占用80端口,需要释放, 步骤见 2.3
2.3 释放目标端口
即: 停止占用端口的服务/应用
方式有两个:
方式一:命令行杀死进程 //只是针对单一进程,没有子进程而言, 有时候未必生效,![Windows 端口占用查看/释放 [包含80端口占用与释放] - 学习/实践 Windows 端口占用查看/释放 [包含80端口占用与释放] - 学习/实践](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzM4Ni85MTMxOTMwZDZmNGE5MmQ1MWI4NzBhMDcwMDY4MmVjMi5wbmc=)
方式二:
通过任务管理器
找到目标进程号所在的应用, 选中, 点击结束任务即可
![Windows 端口占用查看/释放 [包含80端口占用与释放] - 学习/实践 Windows 端口占用查看/释放 [包含80端口占用与释放] - 学习/实践](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzI1LzliNjE5YTRiOTg4MWM5NjgxNGYzMjY0ODExZjcwMjU5LnBuZw==)
进行确认即可.
这里只是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端口。
|