gpt4 book ai didi

linux - 检查已安装的信号处理程序

转载 作者:太空狗 更新时间:2023-10-29 11:15:37 25 4
gpt4 key购买 nike

我有一个库,它为 SIGSEGV 安装了一个信号处理程序用于调试目的。 SIGSEGV 处理程序只是打印一些信息,然后退出程序。

最近,我需要从 Java 调用这个库(使用 JNI),我遇到的问题是 JVM 还为 SIGSEGV 安装了一个信号处理程序,目的比我的更有用。

所以我想要选择的操作是,如果我的库发现已经为某个信号安装了信号处理程序,它就不会安装任何信号。

为清楚起见,我使用的是 sigaction 调用。

现在要实现我的功能,我必须做的是:

一个。阻止所有信号。

调用 sigaction 并检查 oact 是否返回有效的处理程序。

如果是,则重新调用带有 oact 的 sigaction 作为新行为。

解锁信号。

B和c对我来说似乎很麻烦。我想要的是能够确定某个特定信号是否已经有处理程序,而无需先替换处理程序,然后再用原始处理程序重新替换它(一无所获)。

还有什么比 sigaction 更细粒度的吗?

最佳答案

您可以调用 sigaction(SIGSEGV, NULL, &sa) 来查询信号处理而不改变它。

请注意,阻塞信号不会“锁定”其他线程,因为信号掩码是针对每个线程的,而信号处置对于进程中的所有线程都是通用的。

关于linux - 检查已安装的信号处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11871693/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com