手记

一条命令解决macmnsvc.exe占用8081端口的问题

缘起

从前有一个SpringBoot程序,我启动了它。很不幸启动失败,报错如下:

[2020-04-29 16:30:51.086] [main] [ERROR] [apache.catalina.core.StandardService:182 ] - Failed to start connector [Connector[HTTP/1.1-8081]]
org.apache.catalina.LifecycleException: Failed to start component [Connector[HTTP/1.1-8081]]
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
	at org.apache.catalina.core.StandardService.addConnector(StandardService.java:225)
	at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.addPreviouslyRemovedConnectors(TomcatWebServer.java:261)
	at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.start(TomcatWebServer.java:198)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.startWebServer(ServletWebServerApplicationContext.java:311)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.finishRefresh(ServletWebServerApplicationContext.java:164)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:551)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:142)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:386)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:307)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1242)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1230)
	at onemore.study.EightZeroEightOneApplication.main(EightZeroEightOneApplication.java:18)
Caused by: org.apache.catalina.LifecycleException: Protocol handler start failed
	at org.apache.catalina.connector.Connector.startInternal(Connector.java:1020)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	... 13 common frames omitted
Caused by: java.net.BindException: Address already in use: bind
	at sun.nio.ch.Net.bind0(Native Method)
	at sun.nio.ch.Net.bind(Net.java:433)
	at sun.nio.ch.Net.bind(Net.java:425)
	at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
	at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
	at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:219)
	at org.apache.tomcat.util.net.AbstractEndpoint.start(AbstractEndpoint.java:1156)
	at org.apache.coyote.AbstractProtocol.start(AbstractProtocol.java:591)
	at org.apache.catalina.connector.Connector.startInternal(Connector.java:1018)
	... 14 common frames omitted

很明显,启动失败的原因是8081端口被占用了。这个很简单,找到占用端口的进程,把它杀掉就可以了。

寻找解决办法之路

查找占用8081端口的进程的PID:

C:\>netstat -nao | findstr "8081"
  TCP    0.0.0.0:8081           0.0.0.0:0              LISTENING       25056
  TCP    [::]:8081              [::]:0                 LISTENING       25056

根据进程的PID查找进程名:

C:\>tasklist | findstr 25056
macmnsvc.exe                 25056 Services                   0      7,548 K

根据进程名杀掉进程:

C:\>taskkill /f /t /im macmnsvc.exe
错误: 无法终止 PID 25056 (属于 PID 824 子进程)的进程。
原因: 拒绝访问。

拒绝访问?这是什么进程?搜了一下,原来是McAfee Agent,杀毒软件肯定有保护机制,无法结束进程。又搜了一下,McAfee Agent如何修改端口。只在McAfee论坛上找到了一篇几年的帖子,McAfee工程师是这样回复的:

按照McAfee工程师的指引,我没有找到对应的配置选项,可能是时间久远版本不同了。解决方法的寻找之路就此陷入了尴尬的境地。

最终解决办法

不过,在搜索的过程中,我发现一个叫做FrmInst.exe的程序,它用于McAfee Agent框架安装。它有很多参数,详见用于在 Windows 上安装 McAfee Agent 的命令行选项。我注意到一个参数:/REMOVE,如果 McAfee Agent 未使用,则将其删除。 如果正在使用,McAfee Agent 将更改为更新程序模式。 于是,我尝试了一下:

"C:\Program Files\McAfee\Common Framework\x86\FrmInst.exe" /REMOVE=AGENT

McAfee Agent开始被重新安装,重新安装后奇迹出现了,8081端口不再被占用了。

温馨提示:FrmInst.exe的路径可以不同,可以在McAfee的目录中搜索FrmInst.exe。

0人推荐
随时随地看视频
慕课网APP