如何查找并强制关闭占用串口端口的程序?
如何查找并强制关闭占用串口端口的程序?
串口设备,可以说是计算机上最古老和最长寿的通讯外设了。在使用串口设备时,常常因为软件编写不当,导致串口被进程无端占用,只有重启才能解决战斗,这里笔者在网络上搜集到一些方法,并通过WIN10系统测试验证其行之有效,在这里标记上出处,汇总整理,结合自己的实际体验介绍给大家。
一个外设的调用包括外设本身,驱动,系统接口,调用程序几部分构成,在我的实际调试经历中,由于上位机写得太垃圾,时常卡死闪退,但是程序闪退端口却被占用了。
In some cases, to free up a serial port (COM port), you will need to find out which application is using the port.
文章信息来源:
下载Process Explorer(procexp64)找到占用端口的程序
你可以在微软官网下载learn.microsoft.com
解压,右键以管理员权限运行。
打开后,点击‘Find -> Find Handle or DLL’ 或者快捷键
Ctrl+F
在输入框‘Handle or DLL substring’中,可以尝试以下关键词:
- usbser
- Serial
- VCP
对于我来说,关键词
\Device\VCP
可以查到对应的进程和他的PID。除此之外,这是在Stackoverflow reply和michaelbergeron中的一些案例:
如果关键词找不到怎么办?
方法1: 设备管理器,找到对应的串口设备
- 右键
属性
->详细信息
->服务
,尝试使用这个关键词BTHMODEM,在procexp64中搜索。
方法2:手动查找对应的程序
vb.net - How do I determine which process is using a serial port? - Stack Overflow
- 管理员权限运行procexp64
Ctrl+L
,查看每个进程的handles,单击打开串行端口的进程,然后查看下部窗格以查看哪些句柄看起来可能是串行端口。可以在查看时打开和关闭端口,文件句柄应该出现和消失,并以绿色或红色突出显示。当然,只有当您有多个串行端口或者您尝试诊断的串行端口并不总是被某种神秘进程锁定时,这才有可能。
杀死进程,接触端口占用
How to Delete Or Clear COM Ports In Use - Device Manager Hidden
通过命令行杀死对应的进程,
- 通过进程名字:
1 | taskkill /F /IM putty.exe |
- 通过PID号
1 | taskkill /pid 1688 /F |
可通过命令tasklist 再次确认是否成功终止,如果成功终止此次执行命令后应返回空.
1 | tasklist | findstr "1688" |