【要約】趣味でRaspberry Piを買ってLチカしたら、pkill -9 で世界観が変わった話 [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
開発者がRaspberry PiでGPIO制御を行う際、プロセスの終了と物理的な出力状態が乖離する問題に直面する。これは、ソフトウェアの終了処理が物理的なレジスタ状態を必ずしも制御できないことに起因する。
- ・SIGKILL等の強制終了では、Pythonのatexitやfinallyが実行されない。
- ・プロセスが消滅しても、SoC内のレジスタに書き込まれた出力状態は保持される。
- ・結果として、LEDが点灯し続けるなどの意図しない状態が残るリスクがある。
// Approach
筆者は、プロセスがどのような形で終了してもデバイスを安全に保つため、以下の3層の防御策を提案している。
- ・アプリケーション層:with文やtry-finallyを用い、通常の例外やSIGTERM時の後始末を行う。
- ・プロセス管理層:systemdのExecStopPostを活用し、プロセス死後もOSレベルで後始末を実行する。
- ・ハードウェア層:プルダウン抵抗を実装し、未駆動時に物理的に電位を確定させる。
// Result
実験を通じて、ソフトウェア層の対策だけでは物理的な安全性を完全に担保できないことを実証した。これにより、信頼性の高い組込みシステムを設計するための具体的な指針が示された。
- ・pkill -9による強制終了時でも、systemdや物理回路による対策があれば状態を制御できる。
- ・「上位層の対策は下位層の代わりにならない」という設計原則の重要性が明確になった。
Senior Engineer Insight
> 組込み開発において、プロセス管理と物理状態の同期は極めて重要だ。Web開発のステートレスな感覚でハードウェアを扱うと、異常終了時に物理的な事故を招く恐れがある。systemdによる後始末や、物理的なプルダウン抵抗といった多層防御の設計は、高信頼性が求められる現場での必須知識である。ソフトウェアの限界を認め、ハードウェアとOSの層で補完する設計思想が、実戦的なシステム構築には不可欠だ。