環境
- Windows 11 Home 22H2 22621.3155
- Arduino IDE 2.3.2(おそらく2.2.2-nightly-20230909が自動アップデートかかったもの)
python3.10(PCのやつでなくボードマネージャー個別のpythonが指定されていた)- Rasberry Pi Pico/PR2040 3.7.2(ボードマネージャー) <- 調査完了してないがこいつが原因
- python3.7.2(PCのやつでなくボードマネージャー個別のpython)
状況
調査の過程でボードマネージャーからRasberry Pi Pico/PR2040をアンインストール(remove)と再インストールした時点で再現しなくなってしまったので再現待ち。多分根本解決していない。
事象
ArduinoIDEでスケッチを開いた後にスケッチの入っているフォルダを移動させようとすると「別のプログラムがこのフォルダーまたはファイルを開いているので操作を完了できません」というメッセージが表示される。リソースモニターから見るとpython3が握っていることになっている。
なお、リソースモニターはwindowsの下タブにある検索に perfmon.exe /res と入力すると起動できる。(初回はなにか選択画面出たかも)CPUタブの下にある関連付けされたハンドルにフォルダの古パスを入力すると握っているプロセス名とPIDがわかる。
取り急ぎリソースモニターの下の関連付けられたハンドルに出てきたプロセスを右クリックで終了させると解放されるけど気持ち悪い。
調査(中)
プロセス確認
MSのプロセスツリーを確認できるツールをダウンロード&解凍。dosからたたいてプロセス確認。
C:\Windows\System32>cd C:\Users\kitam\Desktop\あまりつかわない
C:\Users\kitam\Desktop\あまりつかわない>cd PSTools
C:\Users\kitam\Desktop\あまりつかわない\PSTools>pslist64.exe -t
PsList v1.41 - Process information lister
Copyright (C) 2000-2023 Mark Russinovich
Sysinternals - www.sysinternals.com
Process information for DESKTOP-O6SRQ2U:
Name Pid Pri Thd Hnd VM WS Priv
(他プロセス省略)
explorer 7584 8 153 7671 2152843248 355796 241016
Arduino IDE 696 8 36 809 3330468296 110296 58484
Arduino IDE 8584 8 15 287 2185658844 44460 13276
Arduino IDE 9280 4 18 440 3340778512 241524 193684
Arduino IDE 14892 10 15 439 2185925932 90868 56544
Arduino IDE 15064 8 13 315 3330165336 159420 161084
Arduino IDE 1840 8 13 297 3330158484 106104 45512
Arduino IDE 8308 8 8 180 3330113680 86748 23028
arduino-cli 10620 8 13 245 5650744 138376 135932
serial-discovery 3448 8 11 189 4944052 14760 23016
mdns-discovery 7160 8 8 141 4884508 9468 16052
python3 9552 8 2 162 64840 12964 5132
conhost 10432 8 2 119 2151778436 10368 5340
Arduino IDE 11172 8 20 198 3330222164 93096 34792
IDE起動中にPID9552でpythonが起動していたが、閉じたところ
C:\Users\kitam\Desktop\あまりつかわない\PSTools>pslist64.exe -t
PsList v1.41 - Process information lister
Copyright (C) 2000-2023 Mark Russinovich
Sysinternals - www.sysinternals.com
Process information for DESKTOP-O6SRQ2U:
Name Pid Pri Thd Hnd VM WS Priv
(他プロセス省略)
python3 9552 8 2 162 64840 12976 5132
単独でプロセスがのこってしまっている。
ネットをパッと見る限り情報なさそう。
ちなみに以前使っていたArduinoIDE1.8.19を起動したところ1.8.19では発生せず。2になる時に根本的に変わっているので2系の問題っぽい。
上のプロセスツリーを見る限りArduino IDEが動かしているarduino-cliが動かしているpython3がフォルダをにぎりっぱになっているのだろう。
とりあえずタスクマネージャーから引っ張ってきた怪しげなところの起動時引数が下。
名前 PID 状態 ユーザー名 CPU メモリ (アクティブなプライベート ワーキング セット) コマンド ライン アーキテクチャ 説明 arduino-cli.exe 10208 実行中 kitam 00 88,832 K "C:\Users\kitam\AppData\Local\Programs\Arduino IDE\resources\app\lib\backend\resources\arduino-cli.exe" daemon --port 0 --config-file c:\Users\kitam\.arduinoIDE\arduino-cli.yaml -v x64 arduino-cli.exe
名前 PID 状態 ユーザー名 CPU メモリ (アクティブなプライベート ワーキング セット) コマンド ライン アーキテクチャ 説明 python3.exe 15928 実行中 kitam 00 4,112 K C:\Users\kitam\AppData\Local\Arduino15\packages\rp2040\tools\pqt-python3\1.0.1-base-3a57aed/python3 -I C:\Users\kitam\AppData\Local\Arduino15\packages\rp2040\hardware\rp2040\3.7.2/tools/pluggable_discovery.py x86 Python
rp2040といっているのでraspi pico用のやつが悪さしているっぽい。
試しにボードマネージャーからRasberry Pi Pico/PR2040をアンインストール(remove)するとpythonのプ℟セス立ち上がらなくなり閉じたあともきちんと解放されるようになった。
Arduino IDE 14328 8 42 821 3330526188 126868 77340
Arduino IDE 3808 8 16 292 2185667036 44344 13308
Arduino IDE 13600 8 22 462 3340829368 380448 330472
Arduino IDE 14220 10 14 444 2185918956 124312 90924
Arduino IDE 14256 8 15 322 3330181720 239328 225252
arduino-cli 2288 8 15 239 5646504 162824 160628
serial-discovery 2548 8 11 177 4938924 9700 18704
conhost 3752 8 3 118 2151778936 10340 5352
mdns-discovery 5104 8 7 128 4881308 8080 13932
Arduino IDE 3096 8 23 198 3330246684 96836 40656
Arduino IDE 5092 8 16 301 3330183060 114132 54612
Arduino IDE 5204 8 11 180 3330138256 88576 23964
arduino-fwuploader 6208 8 12 331 4958920 22196 21720
conhost 4280 8 4 116 2151779456 10356 5392
ちなみに以下のjsonで指定しているもの。
https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json
原因ソース
多分こちら。スレッドのグローバル変数を外部から操作する思想みたいだが、操作元がいない模様。
どうしよう。
と、思っていたところ再インストールした時点で予想外に再現しなくなったので再現待ち。多分解決しておらず、なにかトリガーになるアクションを踏んでいない。
scannerGo = False
def scanner():
global scannerGo
scannerGo = True
boards = False
while scannerGo: