#1153·glog

当进程 PID 为 1 时,`InstallFailureSignalHandler` 的预期行为

作者: dambrosio创建于 2025年2月10日更新于 2025年2月10日

你好,感谢你对glog库的所有工作,我们在代码库中广泛地使用它! 我有一个关于在一个以 PID 1 进程为入口的二进制文件中使用InstallFailureSignalHandler函数的预期行为的快速问题。 我注意到,当触发信号(SIGSEGVSIGABRT 等)时,InstallFailureSignalHandler函数会处理kFailureSignalsFailureSignalHandler函数会成功输出堆栈跟踪,但应用程序会无限期挂起。 经过一些调试,似乎这是由于InvokeDefaultSignalHandler函数中 OS 调用的kill(getpid(), signal_number)行为造成的。 我对该函数的理解是,它会"取消注册"给定的用户信号,以便 OS 通过其默认信号处理器来处理该信号,通过调用kill()。 通过 digging around,我发现对于 Linux 中的 PID 1 进程,没有默认信号处理器,该进程不会接收由kill()提供的信号: > Linux 中的 PID 1 进程没有任何默认信号处理器,因此不会接收和传播信号。 这最终会使进程无限期运行。 我为我们的用例添加了一个补丁到 signalhandler.cc 以处理这种情况: