前言:
端口的占用跟冲突对于搞it的人来说是最常见不过的问题了,不过其实也很简单。因为每个程序都必须有一个端口而且同一个系统同一个传输控制协议中端口是不能出现重复的,如果重复出现冲突,冲突的情况跟ip冲突其实是一个样的,一个用得了一个用不了!就这么简单。ps:记得是同一个系统同一个传输协议,这一点很重要,为什么这样说呢?因为tcp端口与upd端口是不同的,tcp传输控制协议的程序占用了一个80port,而udp传输控制协议的程序也同样占用了一个80端口,这不叫端口冲突,因为传输协议不一样!只有当tcp协议的程序使用了80端口,然后另外一个tcp协议的程序也使用80端口是无法正常启动/通信的,因为端口已经被其他程序占用了。
实操分析:
如下我在自己电脑安装了nginx程序,用于进行web网站的搭建。而我没有ssl证书所以只能使用http协议了。http协议的默认端口是80,但是我的nginx服务无法启动!其实就是端口占用导致的。如下分析处理……
1. 以管理员方式运行cmd输入: netstat -aon
1.使用netstat -aon可以查看系统所有的网络连接状态。
2. 因为我nginx配置了使用tcp协议的80端口,所以我要检查是不是因为其他程序使用了tcp协议80的端口。
2. 分析:
如下图片可以看到80端口被一个地址为0.0.0.0(所有不清楚地址的主机都用0.0.0.0代替),外部地址也是0.0.0.0,PID也就是进程id为:6016
3.通过PID查找进程:tasklist
tasklist工具可以用来查看系统所有进程
4. 对结果进行指定字符串匹配:
如上第三点直接输入tasklist会出现很多进程,一个一个找太麻烦了,如下我将使用:tasklist | find "PID"进行筛选,筛选出pid为:” 6016 “ 的进程。(find命令可以对结果进行字符串匹配)
5. 杀死占用端口的进程:taskkill /F /PID ”PID“
杀死进程之前最好检查一下是哪个程序的进程,以免影响其他程序运行!不过一般都不会是系统进程占用端口!所以问题也不是很大,直接结束就行了!结束之后就可以空出该端口给其他程序使用了!
6.再次启动nginx
再次启动可以看到nginx已经可以正常启动了!
adi:结束掉占用端口的程序之后还要继续对该程序进行检查以防下次开起该程序还会对端口进行占用!从而影响其他程序的运行,当然如果是不需要的程序可以直接对其进行卸载即可!