我的应用程序因库中的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应该在我的处理程序中处理相同,因为它们都在相同的进程上下文中。 ;(