Android 技術

Android NDKにおけるシグナル発生時動作

Android NDKを使用している中で二点つまづいた点があったので、挙げておきます。

まず、AndroidのDalvik仮想マシンは、SIGQUITとSIGUSR1を使用するようで、これらシグナルのハンドリングを自分のプログラムで行うことはできません。
シグナルハンドラは呼び出されませんし、また、システムコールの中でEINTRを戻すような動作も行われません。ですので、使うのであれば、SIGUSR2あたりになるかと思います。(実は、SIGUSR2もDalvikのビルドスイッチ次第では使われるそうですが。)

二つ目は、usleepというシステムコールがシグナルによる割り込みが入っていも、EINTRで戻らないということです。理由は分かりませんがそのようになっています。
これには代案があります。それは、usleepの代わりにnanosleepを使用することです。nanosleepはシグナルによる割り込みに対して、EINTRで戻ってきます。

-Android, 技術
-, , ,

© 2021 BLuE AND PuRE