web-dev-qa-db-ja.com

デバイスまたはリソースをビジー状態にするプロセスを強制終了します: '/ dev / ttyUSB0'?

次のPythonコードでArduinoボードに接続します。

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

通常は機能しますが、再起動後に他のプロセスがボードにアクセスしている必要があり、エラーが発生します

serial.serialutil.SerialException:ポート/ dev/ttyUSB0を開くことができませんでした:[Errno 16]デバイスまたはリソースがビジーです: '/ dev/ttyUSB0'

USBプラグを抜き差しすると、エラーが発生することなく、Pythonコードを正常に実行できます。他のプロセスがポートをブロックしないようにするにはどうすればよいですか?また、その理由を見つけるにはどうすればよいですか?このエラー?

17
birgit

あなたが使用することができます

$ fuser /dev/ttyUSB0

ファイルを使用するプロセスのPIDを一覧表示します。または、fuserコマンドでサポートされている場合は、-kオプションを使用してそれらを強制終了できます。

20

私の場合

$ fuser /dev/ttyUSB0

動作していませんでした(何も表示されませんでした)。

ただし、機能していたのは次のとおりです。

$ Sudo lsof /dev/ttyUSB0

これにより、シリアルポートを使用していたプロセスのリストが表示され、kill(リストの2番目の列に対応)を使用して単純にPIDすることができました。

0
Alf

実行:

$ ps ax

どのプロセスがシリアルポートを使用しているかがわかります。そのプロセスを殺します。これは私のためにそれを解決しました。

0
Anastasia