Android Lollipop 中的信号 33 是​​什么?

sg1*_*993 5 android signals android-source android-framework

我最近观察到信号 33 崩溃,但找不到对此的解释。该信号通常应用于 system_server 进程,但我找不到有关为什么应用它或哪个进程应用它的任何详细信息。此外,这在 Lollipop 之前的任何版本中都从未见过。那么,从 Lollipop 开始对框架进行了哪些更改?

小智 3

Lollipop 及更高版本的 Android 为名为 THREAD_SIGNAL 的信号保留信号 33 (__SIGRTMIN + 1),如您在https://android.googlesource.com/platform/system/core/+/android-5.0.0_r2/libbacktrace/BacktraceThread中看到的.h#34

它应用信号处理程序来获取给定线程的回溯信息(寄存器,最重要的是线程堆栈指针)。

检查https://android.googlesource.com/platform/system/core/+/android-5.0.0_r2/libbacktrace/BacktraceThread.cpp#158以了解它如何设置信号处理程序并传递信号。

通常,debuggerd 是在进程崩溃时检索回溯的那个,但对于任何想要检索进程回溯信息的项目也有可用的包装器,例如用于转储进程的状态以进行分析。ART 就是这个项目之一。