我的问题是:
如果您读取signal()或sigaction()的手册页,您将获得一个异步信号安全函数列表(可以在信号处理程序中安全地调用的函数).但是,我认为这份清单并非详尽无遗.例如,Async-signal-safe函数头下的以下页面http://linux.die.net/man/7/signal读取:
POSIX.1-2004(也称为POSIX.1-2001技术勘误2)要求实现以保证在信号处理程序内可以安全地调用以下函数:
然后它继续列出上面手册页中列出的正常异步信号安全功能.当我读它时,它说"它需要",而不是"这些是唯一的".
例如,该站点说back_trace_symbols_fd()是异步信号安全的.该函数获取的是来自dladdr()的数据,并且它不像back_trace_symbols()那样使用malloc(),所以看起来它可能是安全的.此外,我做了一些测试,dladdr()的输出结构包含char*变量,但这些变量在运行时不是malloc.即使在调用dladdr()之前,它们指向的char字符串也存在于运行时.
任何可以指出我正确方向的想法或想法都会受到赞赏.