在linux服务器端排查问题时,有时会遇到某个端口被多个应用程序占用,或杂windows开发时,我们在启动应用的时候发现系统需要的端口被别的程序占用,如何知道谁占有了我们需要的端口,很多人都比较头疼,下面就介绍一种非常简单的方法,希望对大家有用 :
windows环境下:
开始--运行--cmd 进入命令提示符 输入netstat -ano 即可看到所有连接的pid 之后在任务管理器中找到这个pid所对应的程序如果任务管理器中没有pid这一项,可以在任务管理器中选"查看"-"选择列"
活动连接
协议 本地地址 外部地址 状态 pid
tcp 0.0.0.0:7 0.0.0.0:0 listening 3012
tcp 0.0.0.0:9 0.0.0.0:0 listening 3012
tcp 0.0.0.0:13 0.0.0.0:0 listening 3012
tcp 0.0.0.0:17 0.0.0.0:0 listening 3012
tcp 0.0.0.0:19 0.0.0.0:0 listening 3012
tcp 0.0.0.0:135 0.0.0.0:0 listening 332
tcp 0.0.0.0:443 0.0.0.0:0 listening 3348
tcp 0.0.0.0:445 0.0.0.0:0 listening 4
tcp 0.0.0.0:902 0.0.0.0:0 listening 3112
tcp 0.0.0.0:912 0.0.0.0:0 listening 3112
tcp 0.0.0.0:2869 0.0.0.0:0 listening 4
tcp 0.0.0.0:3306 0.0.0.0:0 listening 2964
假如我们需要确定谁占用了我们的2964端口,在命令行输入以下命令:
c:\users\administrator>netstat -ano|findstr "2964"
tcp 0.0.0.0:3306 0.0.0.0:0 listening 2964
发现端口被进程pid为2964的应用占用
查看进程pid为2964的应用是什么应用?在命令行输入以下命令:
c:\users\administrator>tasklist|findstr 2964
mysqld.exe 2964 services 0 10,828 k
结束该应用进程,输入以下命令:
linux环境下:
1.查找被占用的端口
- netstat -tln
- netstat -tln | grep 8080
netstat -tln 查看端口使用情况,而netstat -tln | grep 8080则是只查看端口8080的使用情况
2.查看端口属于哪个程序?端口被哪个进程占用
lsof -i:8060
command pid user fd type device size/off node name
20804 root 36u ipv6 35452317 0t0 tcp *:pcsync-https (listen)
3.杀掉占用端口的进程 根据pid杀掉
kill -9 进程id
kill -9 20804