无法在JNI中处理SIBUS

时间:2015-10-14 03:11:45

标签: android

我的应用程序因库中的SIGBUS而崩溃(我无法获取该库的源代码)

zygote显示消息:

" I / Zygote(179):由于信号(7)而退出过程8824"

所以我创建了sigbus处理程序,如下所示。

1

    void sigbus_handler(void)
    { printf("SIGBUS CATCH\n"); }

2

    act.sa_sigaction = sigbus_handler
    /* clear blocking mask */
    sigemptyset(&act.sa_mask);
    /* option */
    act.sa_flags = SA_NOCLDSTOP | SA_RESETHAND | SA_ONSTACK | SA_SIGINFO;
    rc = sigaction(SIGBUS, &act, &old_act);     

但是无法处理SIGBUS,只有Zygote给我看了SIGBUS消息。 然后,我使用kill()函数发送信号。像这样:

    kill(getpid(), SIGBUS);

令人惊讶的是,这个信号是在我的处理程序中处理的:

V / sigbus_handler(9279):SIGBUS CATCH

所以我很好奇为什么我不能抓住创建内部库的SIGBUS?只有Zygote才会注意到这个信号?

我认为在我的源代码函数或库函数中创建信号并不重要。两个SIGBUS应该在我的处理程序中处理相同,因为它们都在相同的进程上下文中。 ;(

0 个答案:

没有答案