Windows根据TCP端口号查找进程PID再kill进程

Windows根据TCP端口号查找进程PID再kill进程

Windows环境下,有时候TCP端口莫名其妙的被占用,导致正常的网络端口绑定失败,比如Android开发中,adb无法识别,有时候原因就是端口被占用。Java开发中,端口在占用情况下若再次绑定则抛异常:

Windows根据TCP端口号查找进程PID再kill进程_第1张图片

错误提示:

java.net.BindException: Address already in use: JVM_Bind
	at java.net.DualStackPlainSocketImpl.bind0(Native Method)
	at java.net.DualStackPlainSocketImpl.socketBind(DualStackPlainSocketImpl.java:106)
	at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:387)
	at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:190)
	at java.net.ServerSocket.bind(ServerSocket.java:375)
	at java.net.ServerSocket.(ServerSocket.java:237)
	at java.net.ServerSocket.(ServerSocket.java:128)

此时可使用dos命令找到TCP端口号被那些进程占用,然后根据该进程的PID将其kill。
假设我起了一个程序占用本地端口9999,那么如何找到9999端口被什么进程占用,进而kill掉这个进程呢?
具体步骤如下:


(第一步)使用dos命令:

netstat -a -b -o

显示当前计算机所有端口被占用情况。其中,-a  –b  –o 参数的意义:

  -a            显示所有连接和侦听端口。
  -b            显示在创建每个连接或侦听端口时涉及的
                可执行程序。在某些情况下,已知可执行程序承载
                多个独立的组件,这些情况下,
                显示创建连接或侦听端口时
                涉及的组件序列。在此情况下,可执行程序的
                名称位于底部 [] 中,它调用的组件位于顶部,
                直至达到 TCP/IP。注意,此选项
                可能很耗时,并且在你没有足够
                权限时可能失败。
  -o            显示拥有的与每个连接关联的进程 ID。

命令:

netstat -a -b -o

也可以合并为:

netstat -abo

结果相同。

 

(第二步)上一步输出的结果很多,如果有时间和精力,可以逐个用肉眼筛查,但是更智能化的方式是用命令筛查:

netstat -abo | findstr 9999

该命令中的findstr将根据提供的9999关键字查找包含该关键字的数据结果条目,筛选结果为:

最后面的13152即为占用9999端口的本地进程PID。

(第三步)经过第二步找到进程id :PID后,使用task kill命令即可kill该进程:

taskkill /F /PID 13152

至此,pid为13152的进程被kill,被占用的TCP端口9999得到释放。

 

在Android中,若是通过adb调试,adb提供一个命令杀掉自身占用的adb服务端口:

adb kill-server

反过来,启动adb则是:

adb start-server

 

你可能感兴趣的:(Windows,TCP,进程,端口)