应用程序使用 librpm.so,它通过调用
exit()
来处理一些错误,例如 当它收到 SIGPIPE 时。这会导致 glibc 破坏本地静态对象,而其他线程正在访问它们,从而导致崩溃。
有没有办法让应用程序在 glibc 开始销毁静态实例之前进行清理(取消初始化使用线程的模块)?这些模块是从编译的共享库启动的。
您可以在图书馆接收 SIGPIPE 之前主动捕获它。
示例:https://www.thegeekstuff.com/2012/03/catch-signals-sample-c-code/