问题提示: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端口。 |