信号处理器运行在一个非常严苛的环境中:
- 进程整体已处于濒死状态,全局数据结构未必完整。
- 大多数标准库函数(
malloc、free、printf、strcpy等)不是异步信号安全的。 - 直接调用非安全函数极易导致二次崩溃或死锁。
因此,在信号处理器中只能调用被 POSIX 标记为 async-signal-safe 的函数,例如 write、open、read 等系统调用。这也是为什么业界最佳实践(如 Google Breakpad)选择在信号处理器中只做最小动作——收集寄存器、栈内存片段、模块列表,写出 Minidump 文件,复杂的堆栈回溯和符号化都推迟到下一次启动或服务端完成。




