科技 · 實用指南
APT 顯示「Could not get lock」?停止 process 前先證明 package transaction
lock 正保護 transaction。保存 path 與 holder,證明 progressing 或 stuck,再 bounded wait 或 graceful stop;不要刪 lock file。

lock 正保護 transaction。保存 path 與 holder,證明 progressing 或 stuck,再 bounded wait 或 graceful stop;不要刪 lock file。
frontend lock 協調 dpkg access。 PID 是 holder evidence,不是 kill permission。
1. 保存 error/lock
保存 output、exit、path、PID、command;不同 package lock 不可混用。
unlink pathname 不會關閉 process 持有的 open object,可能產生 second writer。
2. 證明 holder/phase
查 PID、parent、start、command 與 updater/apt/dpkg/cloud-init owner。
以 logs、children、open files、CPU/I/O 判斷 progress。
3. wait 或 approved stop
active work 用 bounded wait 並重查 PID;勿依賴 fixed sleep。
policy 允許且 stuck 才 graceful stop,保存 logs 並等 exit。
4. audit package state
interruption 後以 dpkg --audit 與 logs 判斷 pending state。
dpkg --configure -a 會改 state,只在 evidence 支持時使用。
5. retest 與 fix automation
重跑 original APT action,確認 lock、package result 與 exit 0。
CI 應協調 updater,記錄 owner、decision、audit、retry。
