如何在 Linux 中查找并停止锁定串行端口的内容

Posted

技术标签:

【中文标题】如何在 Linux 中查找并停止锁定串行端口的内容【英文标题】:How to find and stop what has locked a serial port in Linux 【发布时间】:2014-08-14 14:55:11 【问题描述】:

我正在尝试使用 pyserial 连接到 makerbot 3d 打印机。给我带来麻烦的连接代码部分是这样的:

import serial
file = serial.Serial('/dev/ttyACM1', 115200, timeout=1)

当我按原样运行它(即只是 python)时,我得到:

[Errno 13] Permission denied: '/dev/ttyACM1'

所以我用超级用户权限(sudo python)运行它,然后我得到了这个:

serial.serialutil.SerialException: pid 3516 could not open port /var/lock/LCK..ttyACM1: locked by PID 1054

所以我猜设备被什么东西锁定了。但是我怎样才能知道是什么锁定了它,以及如何阻止它呢?

【问题讨论】:

您可以使用 ps -aux | grep 1054 查找 PID 1054 并查看它是什么程序。 【参考方案1】:

我会尝试:

lsof /dev/ttyACM1

你可能需要获取 lsof,因为它可能没有默认安装在你的 dist 上。

根据 lsof 的手册页:

Lsof 在其标准输出文件中列出有关进程打开的文件的信息 [...] 打开的文件可以是常规文件、目录、块特殊文件、字符特殊文件、正在执行的文本引用、库、流或网络文件(Internet 套接字、NFS 文件或 UNIX 域socket.) 可以通过路径选择特定文件或文件系统中的所有文件。

【讨论】:

你能解释一下这是做什么的吗?

以上是关于如何在 Linux 中查找并停止锁定串行端口的内容的主要内容,如果未能解决你的问题,请参考以下文章

linux下如何屏蔽端口

如何清除linux已经存在的端口号?

Linux 的虚拟串行端口

我如何知道要发送到串行端口的内容? [复制]

是否可以在vbscript中使用串行端口

在 C# 中,我如何监听已经打开的 COM(串行)端口?