デバッグ目的でSIGSEGVのシグナルハンドラーをインストールするライブラリがあります。SIGSEGVハンドラーは、いくつかの情報を出力してから、プログラムを終了します。
最近、Javaから(JNIを使用して)このライブラリを呼び出す必要がありました。私が遭遇した問題は、JVMが私よりも便利な目的でSIGSEGVのシグナルハンドラーもインストールすることです。
したがって、私が選択したいアクションは、ライブラリがシグナル用にすでにインストールされているシグナルハンドラーを見つけた場合、シグナルをインストールしないということです。
わかりやすくするために、私はsigactioncallを使用しています。
今、私の機能を達成するために私がしなければならないことは次のとおりです。
a。すべての信号をブロックします。
b。sigactionを呼び出し、oactが有効なハンドラーを返すかどうかを確認します。
c。もしそうなら、新しい行為としてoactでsigactionを呼び直してください。
d。UNBLOCK信号。
Bとcは私には面倒なようです。私が望んでいるのは、最初にハンドラーを置き換えてから元のハンドラーに再置き換えなくても、特定の信号に既にハンドラーがあるかどうかを判断できるようにすることです(何も達成されません)。
sigactionよりも細かいものはありますか?