我有一个库,它为 SIGSEGV 安装信号处理程序以进行调试。SIGSEGV 处理程序只是打印一些信息然后退出程序。
最近,我需要从 Java 调用这个库(使用 JNI),我遇到的问题是 JVM 还为 SIGSEGV 安装了一个信号处理程序,用于比我更有用的目的。
所以我要选择的操作是,如果我的库发现已经为信号安装了信号处理程序,它根本不会安装任何信号。
为清楚起见,我使用的是 sigaction 调用。
现在要实现我的功能,我要做的是:
一种。屏蔽所有信号。
湾。调用 sigaction 并检查 oact 是否返回有效的处理程序。
C。如果是这样,请使用 oact 重新调用 sigaction 作为新行为。
d。UNBLOCK 信号。
B和c对我来说似乎很麻烦。我想要的是能够确定一个特定的信号是否已经有一个处理程序,而无需先替换处理程序,然后用原始处理程序重新替换它(什么都没有)。
还有什么比 sigaction 更细粒度的吗?