本地部署的时候端口被占用之解决

今天准备在本地部署一下,通过http://localhost:4000/查看博客的状态,突然发现无论怎么刷新、怎么cleangenerate都无法通过本地查看,而deploy到git之后却是可以的。自己实在是解决不了,就百度了下,有说是4000的端口被其他进程占用了,有个网友说他的被FoxitProtect进程占用了,我一查我的,的确也有这个进程,看来是上次装福昕阅读器的结果,于是就强制在任务管理器里把它结束了。果然,浏览器那边立刻就刷出来了。

考虑到并不知道4000会被哪个进程占用,我又查了一下如何通过端口号查占用它的进程,以便能结束它,查到一篇博客,这里仔细介绍了如何在命令行下查询端口被哪个进程占用,以及如何查到进程名称和kill它的方法。

Windows平台

使用netstat命令查询PID,然后打开任务管理器,查看对应PID的进程名,结束它。
控制台输入:

1
netstat -nao | findstr "4000"

返回:

1
2
3
TCP    127.0.0.1:4000         0.0.0.0:0              LISTENING       10268
TCP 127.0.0.1:4000 127.0.0.1:64572 TIME_WAIT 0
UDP 127.0.0.1:40000 *:* 2808

这时可以按前述的打开任务管理器,查找PID为10268的进程,并结束它。当然也可以用命令行的方式:

1
tasklist | findstr "10268"

返回:

1
FoxitProtect.exe             10268 Services                   0     11,048 K

显然是FoxitProtect这个进程占用了4000的端口,用如下命令kill它:

1
taskkill /pid 10268

然而返回了这个:

1
2
错误: 无法终止 PID 为 10268 的进程。
原因: 拒绝访问。

查了一番,搞不清楚,还是老老实实在任务管理器里结束吧,反正也找到了PID了。

执行taskkill的时候可能会出现:

1
2
错误: 无法终止 PID 为 10268 的进程。
原因: 只能强行终止这个进程(带/F选项)。

这个时候输入带/F的命令应该是可以的:

1
taskkill /F /pid 10268

返回:

1
成功: 已终止 PID 为 10268 的进程。

似乎还有按进程名来结束进程的方法,比如强行结束记事本进程:

1
taskkill /im notepad.exe /f

就这么多。