Posted on 

如何查找并强制关闭占用串口端口的程序?

如何查找并强制关闭占用串口端口的程序?

串口设备,可以说是计算机上最古老和最长寿的通讯外设了。在使用串口设备时,常常因为软件编写不当,导致串口被进程无端占用,只有重启才能解决战斗,这里笔者在网络上搜集到一些方法,并通过WIN10系统测试验证其行之有效,在这里标记上出处,汇总整理,结合自己的实际体验介绍给大家。

一个外设的调用包括外设本身,驱动,系统接口,调用程序几部分构成,在我的实际调试经历中,由于上位机写得太垃圾,时常卡死闪退,但是程序闪退端口却被占用了。

In some cases, to free up a serial port (COM port), you will need to find out which application is using the port.

文章信息来源:

Root Causing Arduino COM Port Busy Error – Michael Bergeron

下载Process Explorer(procexp64)找到占用端口的程序

  1. 你可以在微软官网下载learn.microsoft.com

  2. 解压,右键以管理员权限运行。

  3. 打开后,点击‘Find -> Find Handle or DLL’ 或者快捷键 Ctrl+F

  4. 在输入框‘Handle or DLL substring’中,可以尝试以下关键词:

    1. usbser
    2. Serial
    3. VCP

    对于我来说,关键词\Device\VCP可以查到对应的进程和他的PID。除此之外,这是在Stackoverflow replymichaelbergeron中的一些案例:

    Image of Process Explorer finding the culprit; NZXT CAM

remove unused com ports windows 10

截图_20231212002544

如果关键词找不到怎么办?

方法1: 设备管理器,找到对应的串口设备

  • 右键属性-> 详细信息-> 服务,尝试使用这个关键词BTHMODEM,在procexp64中搜索。

截图_20231212010428

方法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"