杀死设备或资源繁忙的进程:'/ dev/ttyUSB0'?

bir*_*git 15 python serial-port arduino pyserial

我使用以下Python代码连接到我的Arduino板.

device=glob.glob("/dev/ttyUSB*")[0]
time.sleep(1)
arduino = serial.Serial(device, 115200, timeout=5)
Run Code Online (Sandbox Code Playgroud)

它通常可以工作,但不知何故,一些其他进程必须在重新启动后访问板,从而给出错误

serial.serialutil.SerialException:无法打开端口/ dev/ttyUSB0:[Errno 16]设备或资源忙:'/ dev/ttyUSB0'

当拔出并重新插入USB插件时,我可以正常执行Python代码,而不会发生错误.如何避免阻止端口的任何其他进程?我如何找出出现此错误的原因?

Die*_*ano 18

您可以使用

$ fuser /dev/ttyUSB0
Run Code Online (Sandbox Code Playgroud)

列出使用该文件的进程的PID.或者,如果您的fuser命令支持它,您可以使用该-k选项来终止它们.

  • 我该如何解决呢?!?!:d (4认同)
  • 这并不总是有效,例如,如果您使用GNU屏幕访问`ttyUSBx设备`,然后使用`Ctrl-C`退出,您将获得"设备忙"但它不会显示上述命令. (2认同)

Alf*_*Alf 6

就我而言

$ fuser /dev/ttyUSB0
Run Code Online (Sandbox Code Playgroud)

不工作(它什么也没显示)。

然而,有效的是以下内容:

$ sudo lsof /dev/ttyUSB0
Run Code Online (Sandbox Code Playgroud)

这给了我一个正在使用我的串行端口的进程列表,我可以简单地kill使用它们PID(对应于列表中的第二列)。